2017-04-18 85 views
1

我試圖寫一個網站的結構像這樣的Chrome擴展:如何使用JavaScript將事件偵聽器添加到框架窗口?

<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元素,但我一直能夠這樣做的唯一方法是將click偵聽器添加到window對象,該對象檢查event.target以確保id是我正在尋找的對象。

理想情況下,我想在​​事件之後觸發一個函數,其中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重新加載,似乎無論我創建的事件監聽器當主窗口加載時丟失幀。我怎樣才能防止或解決這個問題? –

相關問題