在JavaScript中向计算器添加计时器

时间:2011-08-09 22:54:24

标签: javascript events firefox-addon listener

我在管理Firefox扩展程序中的网站负载方面遇到了一些麻烦。

我正在使用JavaScript并开发一个Firefox扩展来搜索我自己的网站列表中的字符串,以查找坏词。问题是我正在逐一搜索列表。这意味着,我正在加载一个网页,我向DOMContentLoaded添加了一个事件监听器;当DOM加载函数时,调用该函数来搜索字符串。但是,如果页面没有加载(例如网络问题),则永远不会调用该函数。

有没有办法将计时器设置为事件监听器?如果事件未在5秒内触发,则执行某些操作。或者,如果还有其他方法,请建议! 我最大限度地减少了代码,但我认为你可以在这里得到这个想法。

function main_(){
            //do some stuff here and if needed call to open a new page
            waitForDOM();
}

function waitForDOM(){
            //if the list of pages is grather than 0 then
    //add the new tab here and create the event listener
    gBrowser.addEventListener('DOMContentLoaded',pageLoaded,true);
 }

function pageLoaded(aEvent) {
        //do the search here and calls the function waitForDOM to load a new page and a event listener
    waitForDOM();
}

2 个答案:

答案 0 :(得分:2)

我对Firefox扩展的编码一无所知,但从一般意义上讲,如果在一定时间内没有调用事件处理程序,你当然可以设置一个定时器来执行某些操作。像这样:

var eventTriggeredFlag = false;

function waitForDOM(){
  gBrowser.addEventListener('DOMContentLoaded',pageLoaded,true);
  setTimeout(function(){
               if (!eventTriggeredFlag) {
                  // time's up without the event: do something
               }
             }, 5000);
}

function pageLoaded(aEvent) {
  eventTriggeredFlag = true;
  // whatever else you want to do here...
}

如果您需要使用单独的计时器跟踪多个事件,您显然必须使其更复杂,可能包含一些闭包或一系列事件或其他事件。

答案 1 :(得分:0)

最好是add a progress listener而不是DOMContentLoaded。当页面完成加载时,将始终使用onStateChangeSTATE_STOP标记调用进度监听器的方法STATE_IS_WINDOW - 无论是否存在错误。您可以调用Components.isSuccessCode(aStatus)来查看页面是否成功加载(请注意,这只会报告网络错误,像404这样的HTTP错误仍会算作成功)。