我编写了一个函数,用于在指定时间内运行后捕获循环。
var t1 = new Date().getTime();
while(true){
//general code in here...
document.body.appendChild(document.createElement('div')); //This causes the problem
if(isInfinite(t1,3000)){
alert('Loop stopped after 3 seconds')
break;
}
}
function isInfinite(t1,timeLimit){
var t2 = new Date().getTime();
if(t2-t1> timeLimit){
return true;
}
else return false;
}
它按预期工作,但是当我尝试将节点附加到文档时,它无法捕获chrome&苹果浏览器。 当我运行调试器时,它有什么奇怪的效果,它可以在FF中运行。造成这种情况的原因是什么?
答案 0 :(得分:0)
也许你在DOM准备好之前解雇这个JS代码。这是我的实施。
<!--Basically I am firing this script with onload event function.-->
<html>
<head></head>
<body onload="init()">
<script>
function init() {
alert("asg");
var t1 = new Date().getTime();
while(true) {
//general code in here...
document.body.appendChild(document.createElement('div')); //This causes the problem
if(isInfinite(t1, 3000)) {
alert('Loop stopped after 3 seconds')
break;
}
}
function isInfinite(t1, timeLimit) {
var t2 = new Date().getTime();
if(t2 - t1 > timeLimit) {
return truite;
} else return false;
}
}
</script>
</body>
</html>
但是,这个脚本很可能会崩溃,具体取决于浏览器制造商如何设置循环限制(这通常发生在主线程被阻止时)。所以我认为在这个例子中使用setTimeout函数要好得多。
Javascript是基于事件的,它只有1个线程。你已经提到过你要向初学者展示它。为什么不解释它们基于事件的JS性质而不是这样做呢?