2012-12-01 157 views
2

我正在编写一个脚本,用于从页面中序列提取信息,一般来说,我必须暂停JavaScript,但页面会继续加载,并且JavaScript会停止。睡眠/等待/暂停javascript

的setTimeout是没有必要的,因为脚本的其余部分仍在运行

我需要它,以使脚本继续其他脚本(我没有访问权限)后运行下载必要的数据到页面(这需要3秒钟)。

P.S.如果有什么我拉信息从村 - 使用Mozilla的与extention“用户脚本”

+3

而不是暂停脚本,我会触发一个事件,并在js中的事件处理程序代码中编写我的逻辑。这种方式不依赖于秒数,即3或5或任何东西。 – Mandar

回答

1

正如前面的回答和评论所暗示的那样,这样做的正常方法是在脚本加载到setTimeout函数后,将要运行的代码放入。例如,如果您担心在等待时触发事件处理程序并导致错误,则需要禁用事件处理程序(例如element.onclick = null),然后在超时功能内重新启用它们。我想你也可以做这样的事情:

var pause = false; 
... 
callExternalScript(); 
pause = true;  
setTimeout(function() { 
    pause = false; 
}, 3000); 
... 
function oneOfMyOtherFunctions() { 
    if (pause) return; 
    ... 
} 
... 

但这是凌乱的,因为你必须包括if (pause) return在要禁用,而脚本暂停每个函数的开始。此外,您可能希望或不希望添加额外的代码来运行脚本暂停时调用的所有这些函数,只要该脚本已被暂停。

+0

如果可以将setTimeout替换为一旦另一个脚本完成后就会触发的事件,根据Mandar的评论,那将是更可取的。 – Stuart

2

http://www.mosgortrans.org/pass3/我不明白为什么setTimeout在这里没有必要 - 这不正是你的描述:

setTimeout(function() { 
    // this code runs 3 seconds after the page loads 
}, 3000);