firefox扩展。如何捕获onload事件?

时间:2009-12-31 02:29:43

标签: javascript firefox

因此,Firefox的脚本扩展。 它是somelika一个用javascript编写的webspider。 我想做什么:

我希望它加载一个页面,他们做一些工作,然后转到另一个页面(使用加载页面中的URL)。加载新页面后 - 蜘蛛做同样的工作。

Algoritm就像这样:

  1. 等到页面加载
  2. 做一些工作
  3. 选择其他网址
  4. 转到此网址
  5. 转到1。
  6. 在我的主要功能中,我执行此代码:

    gBrowser.addEventListener("DOMContentLoaded",haXahv8, false); 
    

    一切正常,直到我去另一个页面...我如何在我的firefox扩展中重用DOMContentLoaded事件? 所以,问题是: 是否可以在firefox扩展中为不同的页面重用load / DOMContentLoaded事件?如果是,那怎么样?

    p.s. \更早以前我用Windows窗体和webbrowser + c ++来解决这个问题...哦,现在是什么时间......一个梦想!因为一切正常=)

2 个答案:

答案 0 :(得分:11)

您只需要注册一次该事件,并且每次浏览器选项卡触发它时都应该收到它。

如果您在向gBrowser元素添加事件侦听器之前等待XUL窗口触发其load事件,那么您的代码应该可以正常工作。如果要在此之前添加事件侦听器,则尚未初始化gBrowser,并且行为未定义。

以下是一个例子:

window.addEventListener('load', function () {
    gBrowser.addEventListener('DOMContentLoaded', function () {
        // stuff that happens for each web page load goes here
    }, false);
}, false);

请注意,在实践中,我只能确定这适用于Firefox 3.5及更高版本。我写了一个扩展(我的公司内部),它为Firefox 1.5到3.5可靠地完成了这种事情,但遗憾的是它比上面的解决方案更加复杂(幸运的是)。如果你需要支持超过Firefox 3.5+,请告诉我,我会提供更多信息。

这是一些额外的阅读:

答案 1 :(得分:3)

addEventListener()方法的最后一个参数(在您的情况下设置为“false”)需要设置为true,这会告诉浏览器每次事件发生时都会触发您的事件处理程序。

当前值false表示只在第一次发生事件时触发处理程序。

希望我能帮助你们有些时间,我花了很长时间搜索W3C.org上的文档对象模型事件页面!