Javascript TypeError:值未实现接口WindowProxy

Javascript TypeError:值未实现接口WindowProxy,javascript,firefox-addon-sdk,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); eleme

我正在尝试将一个插件从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:值未实现接口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]]

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

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

我不知道是否有一种方法可以在不使用
unsafeWindow
的情况下模拟事件(页面可能会更改
document.createEvent
,然后呢?)。它在Chrome中工作,没有
unsafeWindow
。如果有人指出如何正确执行此操作,或者详细说明为什么可以使用
unsafeWindow
,我可以接受这个答案