1

我正在尝试在我的 Firefox 扩展中运行具有内容权限的托管脚本。为此,我在隐藏窗口中创建了一个内容 iframe,指向一个提取脚本的 html 文件。此脚本要求“历史”可用,但在隐藏窗口中创建的 iframe 由于某种原因没有历史。

Chromebug 为 iframe 的 contentWindow.history 报告了这一点:

object does not support history (nsIDOMHistory)

当脚本不可用时,该脚本会给出此错误:

Error: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.length]

有任何想法吗?

4

2 回答 2

1

原来隐藏窗口的 URL 曾经是 about:blank,但这显然是一个安全漏洞,所以现在是 resource://gre/res/hiddenWindow.html(或 resource://gre-resources/hiddenWindow.html)。 html on trunk) 所以它没有 XUL 浏览器元素需要的 chrome 权限来连接它自己的会话历史,甚至访问它自己的内容文档。

即使使用 XUL iframe 元素,您也必须小心,因为它的所有属性都不起作用,再次因为它在没有 chrome 权限的情况下运行。因此,您必须执行 iframeElement.boxObject.QueryInterface(Components.interfaces.nsIContainerBoxObject).docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow) 之类的操作来检索其内容窗口。

于 2010-04-13T21:15:47.350 回答
0

A <browser type="content"> will automatically wire up session history by default, while an <iframe type="content"> will not, but you could always wire it up yourself manually.

Don't forget to ensure that your element is created in the XUL namespace. I believe the hidden window is the about:blank HTML document except on the Mac.

于 2010-04-12T23:27:00.660 回答