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 
} 
+0

拡張機能のインストール/更新時に、manifest.jsonで宣言されたコンテンツスクリプトは、既存の開いているタブに自動的に挿入されません。 [アップグレードまたはインストール後のChrome拡張機能のコンテンツの再注入](// stackoverflow.com/a/11598753)など、手動で行う必要があります。 – wOxxOm

+0

@wOxxOmコンテンツスクリプトがまったく読み込まれないという問題は__not__です。クリックイベントリスナーだけが常に動作しているわけではありません。 – jjdoe

+0

FFでのみ発生しますか?私はiframeに奇妙なタイミングの問題があることを知っています。これはiframeをドキュメント本体に追加してから、setTimeoutコールバックでそのコンテンツにアクセスする必要があります。 – wOxxOm

答えて

0

はこれまでのところ、それが見えます。それは報告し、承認された:修正がバージョンで予定されてhttps://bugs.chromium.org/p/chromium/issues/detail?id=745771

可能な回避策は、例えば、イベントリスナーを再追加しますiframeのmouseoverイベントハンドラで

関連する問題