如何使用JavaScript将事件监听器添加到框架窗口?

时间:2017-04-18 15:45:03

标签: html frame addeventlistener keydown

我正在尝试为网站编写一个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元素,但我能够这样做的唯一方法是向click对象添加window侦听器。 event.target以确保id是我正在寻找的。

理想情况下,我希望在按下keydown键的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属性是空数组。当我将keydown事件附加到该节点时,它仍然无法正常工作。有谁知道我能做些什么来解决这个问题?最后,我想通过remove_content_IDs()密钥关注select元素时运行Tab

1 个答案:

答案 0 :(得分:3)

keydown使用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);
});