Javascript 在Firefox插件内容脚本中访问窗口对象?

Javascript 在Firefox插件内容脚本中访问窗口对象?,javascript,firefox,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Firefox Addon,Firefox Addon Sdk,我似乎无法访问内容脚本中的窗口对象。这正常吗 例如,这不起任何作用: window.onload = function() { console.log("Hello from the onload"); }; 相反,我必须使用unsafeWindow对象 unsafeWindow.onload = function() { console.log("Hello from the onload"); }; 我一定错过了一些简单的东西,对吧?内容脚本中可用的窗口对象实际上是一个代理-因此

我似乎无法访问内容脚本中的窗口对象。这正常吗

例如,这不起任何作用:

window.onload = function() {
  console.log("Hello from the onload");
};
相反,我必须使用
unsafeWindow
对象

unsafeWindow.onload = function() {
  console.log("Hello from the onload");
};

我一定错过了一些简单的东西,对吧?

内容脚本中可用的窗口对象实际上是一个代理-因此,unsafeWindow工作,而window不工作。我做了一些测试并记录。addEventListener也不工作:

尽管jQuery似乎工作得很好,但我认为它们确实有一些魔力来确保无论发生什么情况都能启动

解决方法是简单地将contentScriptWhen设置为“结束”,并立即运行您的代码——这应该始终有效,因为在文档加载完成后会附加内容脚本

我确实在日志中记录了这个bug,我喜欢将其视为这种行为的“wtf”方面——我认为其结果令web开发人员感到惊讶,我们应该尽量不那么惊讶:


内容脚本中可用的窗口对象实际上是一个代理-因此,unsafeWindow工作,而window不工作。我做了一些测试并记录。addEventListener也不工作:

尽管jQuery似乎工作得很好,但我认为它们确实有一些魔力来确保无论发生什么情况都能启动

解决方法是简单地将contentScriptWhen设置为“结束”,并立即运行您的代码——这应该始终有效,因为在文档加载完成后会附加内容脚本

我确实在日志中记录了这个bug,我喜欢将其视为这种行为的“wtf”方面——我认为其结果令web开发人员感到惊讶,我们应该尽量不那么惊讶:


不要使用
窗口。onload
,而是写:

window.addEventListener("load", function() {
  console.log("Hello from the onload");
}, false);
window.onload
有一个限制,即只能有一个事件侦听器,设置不同的侦听器将替换现有的侦听器-这已经是您不应该使用它的原因。对于附加SDK,事情会变得更加复杂,因为内容脚本的DOM视图与网页视图不同。所以只要使用


哦,请不要使用
unsafeWindow
-它(正如名称所说)本质上是不安全的。

不要使用
window.onload
,而是写:

window.addEventListener("load", function() {
  console.log("Hello from the onload");
}, false);
window.onload
有一个限制,即只能有一个事件侦听器,设置不同的侦听器将替换现有的侦听器-这已经是您不应该使用它的原因。对于附加SDK,事情会变得更加复杂,因为内容脚本的DOM视图与网页视图不同。所以只要使用


哦,请不要使用
unsafeWindow
-它(正如名称所说)本质上是不安全的。

不幸的是,存在一个相关问题
window.onbeforeunload
window.onunload
也无法访问,并且
$(window.bind('onbeforeunload',fn)
不起作用。据我所知,从内容脚本中调用onunload或onbeforeunload函数没有解决方法。这就是我真正需要能够做到的,我有点简化了我的问题以保持简短(doh!)。我可以提出一个新的SO问题,提交一份Moz bug报告,制作一个例子等等。当然,你需要什么。当然
文档。addEventListener
不起作用-它是
窗口。addEventListener
。不幸的是,有一个相关的问题
window.onbeforeunload
window.onunload
也无法访问,并且
$(window.bind('onbeforeunload',fn)
不起作用。据我所知,从内容脚本中调用onunload或onbeforeunload函数没有解决方法。这就是我真正需要能够做到的,我有点简化了我的问题以保持简短(doh!)。我可以提出一个新的SO问题,提交一个Moz bug报告,制作一个示例等等。当然,你需要什么。addEventListener不起作用-它是
窗口。addEventListener