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

laz*_*bob 7 javascript firefox

所以..forfor firefox的脚本扩展.它是somelika一个用javascript编写的webspider.我想做的事:

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

Algoritm有点像这样:

  1. 等到页面加载完毕
  2. 一些工作
  3. 选择一个不同的网址
  4. 去这个网址
  5. 转到1.

在我的主要功能中我做这个代码:

gBrowser.addEventListener("DOMContentLoaded",haXahv8, false); 
Run Code Online (Sandbox Code Playgroud)

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

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

Mik*_*ike 11

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

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

这是一个例子:

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

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

这是一些额外的阅读: