我正在尝试为网站编写一个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
是我正在寻找的。 p>
理想情况下,我希望在按下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
。
答案 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);
});