我在管理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();
}
答案 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
。当页面完成加载时,将始终使用onStateChange
和STATE_STOP
标记调用进度监听器的方法STATE_IS_WINDOW
- 无论是否存在错误。您可以调用Components.isSuccessCode(aStatus)
来查看页面是否成功加载(请注意,这只会报告网络错误,像404这样的HTTP错误仍会算作成功)。