Firefox隐藏窗口中的iFrame有一个contentWindow.history?

时间:2010-04-01 22:18:06

标签: firefox firefox-addon xpcom chromebug

我正在尝试在我的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]

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

事实证明,隐藏窗口的URL曾经是关于:空白,但这显然是一个安全漏洞,所以它现在是资源://gre/res/hiddenWindow.html(或资源:// gre-resources / trunk上的/ hiddenWindow.html)因此它没有XUL浏览器元素所需的chrome权限,以便能够连接自己的会话历史记录,甚至访问自己的内容文档。

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

答案 1 :(得分:0)

A< browser type =“content”>默认会自动连接会话历史记录,而< iframe type =“content”>不会,但你总是可以手动连接它。

不要忘记确保在XUL命名空间中创建元素。我相信隐藏的窗口是关于:空白HTML文档,除了在Mac上。