0
ロードされたページにiframeを挿入するクロム拡張機能があります。 iframeの内容はプログラムによって生成されます。クリックイベントリスナーが追加されるボタンが含まれています。しかし、必ずしも発射するとは限りません。ほとんどの場合、動作しますが、動作しないケースは、拡張機能が新しく読み込まれたとき(インストールされている場合など)です。以下は私のコードの要点です。何か問題はありますか?動的に生成されたiframeコンテンツのイベントリスナーが起動しない
content.js:これはChromeのバグがあるよう
var frame = document.createElement("iframe");
frame.onload = function() {
var doc = frame.contentDocument || frame.contentWindow.document;
var closeButton = doc.createElement("input");
closeButton.type = "button";
closeButton.value = "X";
closeButton.addEventListener("click", function() {
document.body.removeChild(frame);
});
doc.body.appendChild(closeButton);
};
document.body.appendChild(frame);
manifest.jsonを
{
"name": "eventlistener-bug",
"version": "0.1",
"content_scripts": [{
"run_at": "document_idle",
"matches": ["http://*/*", "https://*/*"],
"js": ["content.js"]
}],
"permissions": ["http://*/*", "https://*/*"],
"manifest_version": 2
}
拡張機能のインストール/更新時に、manifest.jsonで宣言されたコンテンツスクリプトは、既存の開いているタブに自動的に挿入されません。 [アップグレードまたはインストール後のChrome拡張機能のコンテンツの再注入](// stackoverflow.com/a/11598753)など、手動で行う必要があります。 – wOxxOm
@wOxxOmコンテンツスクリプトがまったく読み込まれないという問題は__not__です。クリックイベントリスナーだけが常に動作しているわけではありません。 – jjdoe
FFでのみ発生しますか?私はiframeに奇妙なタイミングの問題があることを知っています。これはiframeをドキュメント本体に追加してから、setTimeoutコールバックでそのコンテンツにアクセスする必要があります。 – wOxxOm