2017-04-18 3 views
1

JavaScriptを使用してフレームウィンドウにイベントリスナーを追加するにはどうすればよいですか?私はこのように構成されているウェブサイトのためのChromeの拡張機能を記述しようとしています

<html> 
<head> 
    .... 
</head> 
<frameset> 
    <frame> 
     .... 
    </frame> 
    <frameset> 
     <frame> 
      <html> 
       <head> 
       </head> 
       <body> 
        <select id="theThingIWant"></select> 
       </body> 
      </html> 
     </frame> 
     <frame> 
      .... 
     </frame> 
    </frameset> 
</frameset> 
</html> 

私はそれが完全に非常識に見えるけど、それは長い時間前に作られた、そしてそれは私が使用する必要が何か作業。私はそのselect要素にアクセスしようとしていますが、唯一の方法は、idが私が探しているものであることを確認するためにオブジェクトにclickリスナーを追加して、event.targetをチェックするオブジェクトです。

Tabキーが押された​​イベントの後に関数をトリガーしたいのですが、基本的には同じことをしますが、どこで試してもリスナーをトリガーできないようですそれを添付してください。

私が何をしたいん私のクリックイベント、:動作しません

window.addEventListener('click', function(e) { 
    if (e.target.id === 'selAxisViaAEHybridContent') 
     remove_content_IDs(e.target); 
}); 

は私のKeyDownイベント、(コンソールログは決して起こらない):

window.addEventListener('keydown', function(e) { 
    console.log(e); 
}); 

私はそのframeにアクセスすることができますselect要素はdocument.getElementsByTagName('frameset')[1].children[0]を使用していますが、その上の.childrenプロパティは空の配列です。そのノードに​​イベントを添付しても、それでも機能しません。誰も私がこれを解決するために何ができるか考えていますか?最終的にselect要素のフォーカスがTabキーの場合は、remove_content_IDs()を実行します。

答えて

3

​​をiframeにバインドするには、iframeのcontentWindowプロパティを使用します。

これは参考になるかもしれません。

var ifr = document.getElementsByTagName("iframe")[0]; 
var ifr_window = ifr.contentWindow; 
ifr_window.addEventListener("keydown", function(e){ 
    console.log("clicked ", e.keyCode); 
}); 
+1

これはまさに私が探していたものでした。あなたは真の紳士です。 –

+0

おお!褒めてくれてありがとう。 :) –

+0

実際に私の問題を解決するこの唯一の種類として、私は実際にフォローアップの質問を持っています: フレームのリンクをクリックするたびに、そのフレームのDOMがリロードされ、ロードされたメインウィンドウが失われたときのフレーム。どうすればこれを防ぐことができますか? –

関連する問題