我無法弄清楚這段代碼有什麼問題。它在chrome中運行一次,然後崩潰然後運行,等等。它不能在Firefox和IE中運行。與定時器異步運行
<html>
<head>
<title> Async Module Runner </title>
<script type="text/javascript">
var TestRunner = (function(){
var queue = [];
var paused = false;
return {
run : function(fn) {
queue.push(fn);
if(queue.length > 0 && paused != true && queue[0] != undefined) {
queue.shift()();
}
},
pause : function(){
paused = true;
},
resume : function(){
paused = false;
this.run();
}
};
})();
var AsyncRunner = {};
AsyncRunner.wait = function(fn, time) {
TestRunner.pause();
setTimeout(function(){
fn();
TestRunner.resume();
}, time);
};
var Test = {
setUp : function(){
document.write('yep! <br />');
},
tearDown : function(){
document.write('yep yep <br />');
},
testAsync1 : function(){
AsyncRunner.wait(function(){ document.write('okay! <br />'); }, 3000);
},
testAsync2 : function(){
AsyncRunner.wait(function(){ document.write('okay again <br />'); }, 2000);
},
testAsync3 : function(){
AsyncRunner.wait(function(){ document.write('okay again and again!! <br />'); }, 5000 );
}
};
window.onload = function(){
for(var i in Test) {
TestRunner.run(Test[i]);
}
};
</script>
</head>
<body>
</body>
</html>
我錯過了一些重要的JavaScript?我究竟做錯了什麼??
UPDATE 的代碼運行在以下瀏覽器:Chrome的14.08 - Safari瀏覽器5.1 它也將在JsFiddle.net按預期運行。 它將工作但碰撞反覆在Chrome 5.0 它停止時,它具有運行在以下瀏覽器含有SyncRunner.wait()函數 - 而不發出任何錯誤:火狐3.6 - IE 9 - 劇10.61
UPDATE 2 經過Narenda提供的答案進行了一點調查後,似乎FF 4及以上在這裏遇到了麻煩。但是我並沒有與其他瀏覽器的根本原因。 因此,在非WebKit瀏覽器是使用document.write() 替換爲以下功能document.write()的,它現在應該正常工作的問題:
function print(message) {
var loc = document.getElementById('logpanel');
var tag = document.createElement('li');
if(message != undefined){
tag.appendChild(document.createTextNode(message));
loc.appendChild(tag);
}
}
我仍然有興趣知道哪裏出了錯與其他瀏覽器 感謝
您需要返回標籤前:) –
@RichBradshaw:謝謝!!!! – Eric
頁面加載後使用document.write會導致問題。 http://stackoverflow.com/questions/802854/why-is-document-write-considered-a-bad-practice – BNL