2009-12-31 79 views
6

So..got可编写脚本的Firefox扩展。 这是somelika一个webspider,用javascript编写。 我想要做的事:Firefox扩展。如何捕获onload事件?

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

Algoritm是somelike这一个:

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

in m Ÿ主要功能我这样做代码:

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

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

p.s. \ early我正在解决这个问题,与Windows窗体和Web浏览器+ C++时间...哦,它是什么时间...一个梦想!导致一切正常工作=)

回答

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+以上版本,请告诉我,我会提供更多信息。

下面是一些额外的阅读:

2

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

当前值为false会告诉它只在事件发生时第一次触发您的处理程序。

希望我能在一段时间内为您节省一些时间,我花了不少时间在W3C.org上搜索文档对象模型事件页面!