TypeError:Value未实现接口WindowProxy

时间:2013-07-07 17:55:09

标签: javascript firefox-addon-sdk

我正在尝试将chrome中的加载项移植到firefox。附加组件将是现代风格(bootstrapped / SDK),我正在使用附加组件。

在内容脚本中,我尝试使用以下代码合成事件:

var evt = document.createEvent('MouseEvents');
evt.initMouseEvent('mousedown', true, true, window,
    1, 0, 0, 0, 0, false, false, false, false, 0, null);
element.dispatchEvent(evt);

我在致电initMouseEvent时收到错误:

  

TypeError:Value没有实现接口WindowProxy。

查看变量:

console.log("element:", ""+element);
console.log("document:", ""+document);
console.log("window:", ""+thewindow);

他们有奇怪的包装,但是下面是预期的类型。我有什么想法可以获得成功的呼吁吗?

element: [object XrayWrapper [object HTMLDivElement]]
document: [object XrayWrapper [object HTMLDocument]]
window: [object XrayWrapper [object Window]]

1 个答案:

答案 0 :(得分:0)

解决方案是将window替换为unsafeWindow,将document替换为unsafeWindow.document

我认为有两种脚本,lib中的后端脚本和data中的内容脚本。事实证明,虽然内容脚本可以修改您的页面,但它们实际不会注入页面。这并不是说你只是将脚本挂在页面的源代码下面。 Insead,内容脚本和页面脚本生活在略有不同的上下文中。 unsafeWindow是实际网页脚本中的window。我相信这是因为恶意页面可能会操纵它的window方法,从而改变内容脚本的行为。

我不知道是否有办法在不使用unsafeWindow的情况下模拟事件(页面可能会更改document.createEvent,然后呢?)。它适用于没有unsafeWindow的Chrome。如果有人指出如何正确地做到这一点,或者详细阐述为什么可以使用unsafeWindow,我可以接受这个答案。