0

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

如果 HTML 包含输入字段,我不希望keypress该字段中的事件在 DOM 中冒泡。但是,它们确实会冒泡到<panel>包含嵌入式 iframe 的内容,因此会冒泡到工具栏按钮。知道为什么面板会获取事件,即使它们应该由嵌入式浏览器中的 HTML 元素捕获和处理?

4

1 回答 1

0

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

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

于 2013-05-11T10:00:54.873 回答