从嵌入式浏览器冒泡的Keypress事件

时间:2013-05-10 11:00:55

标签: firefox-addon xul

我有一个Firefox扩展,可以在工具栏上添加一个按钮(准确地说是导航栏)。按下按钮时,将打开XUL <panel>(按钮的子元素),其中嵌入了<iframe>。将HTML文档加载到面板中以显示弹出窗口的内容。

如果HTML包含输入字段,我不希望该字段中的keypress个事件冒泡DOM。但是,他们冒泡到包含嵌入式iframe的<panel>,然后到达工具栏按钮。任何想法为什么面板获取事件,即使它们应该被嵌入式浏览器中的HTML元素捕获和处理?

1 个答案:

答案 0 :(得分:0)

您需要在<iframe>标记上使用type="content",以便在框架边界处停止事件 - 这是保护浏览器Chrome不受内容网页影响的安全机制之一。它还可以阻止框架中的JavaScript代码通过window.parent访问浏览器的chrome并更改其位置。请注意,无论如何,框架仍然可以具有chrome权限 - 就像您可以将chrome://网址加载到浏览器标签中一样,它可以正常工作。

明显的替代方法(仅限可信帧内容)是在附加到<iframe>标记的事件处理程序中调用event.stopPropagation()。请注意,默认小部件(包括输入字段)在处理事件时不会这样做,而是调用event.preventDefault()。这可以确保更高级别的小部件通常会忽略该事件,但是您自己的代码仍可以处理它。