繁体   English   中英

在 JavaScript 中向事件侦听器添加计时器

[英]Adding a timer to an event listener in JavaScript

我在管理 Firefox 扩展中的站点负载时遇到了一些麻烦。

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

有没有办法为事件监听器设置计时器? 如果事件在 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();
}

我对编码 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...
}

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

最好添加进度侦听器而不是使用DOMContentLoaded 当页面完成加载时,将始终使用STATE_STOPSTATE_IS_WINDOW标志调用进度侦听器的onStateChange方法 - 无论是否存在错误。 可以调用Components.isSuccessCode(aStatus)来查看页面是否加载成功(注意这只会报网络错误,HTTP 错误如 404 仍会算成功)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM