我有一个Firefox扩展,可以在工具栏上添加一个按钮(准确地说是导航栏)。按下按钮时,将打开XUL <panel>
(按钮的子元素),其中嵌入了<iframe>
。将HTML文档加载到面板中以显示弹出窗口的内容。
如果HTML包含输入字段,我不希望该字段中的keypress
个事件冒泡DOM。但是,他们做冒泡到包含嵌入式iframe的<panel>
,然后到达工具栏按钮。任何想法为什么面板获取事件,即使它们应该被嵌入式浏览器中的HTML元素捕获和处理?
答案 0 :(得分:0)
您需要在<iframe>
标记上使用type="content"
,以便在框架边界处停止事件 - 这是保护浏览器Chrome不受内容网页影响的安全机制之一。它还可以阻止框架中的JavaScript代码通过window.parent
访问浏览器的chrome并更改其位置。请注意,无论如何,框架仍然可以具有chrome权限 - 就像您可以将chrome://
网址加载到浏览器标签中一样,它可以正常工作。
明显的替代方法(仅限可信帧内容)是在附加到<iframe>
标记的事件处理程序中调用event.stopPropagation()
。请注意,默认小部件(包括输入字段)在处理事件时不会这样做,而是调用event.preventDefault()
。这可以确保更高级别的小部件通常会忽略该事件,但是您自己的代码仍可以处理它。