2012-06-20 50 views
0

我不明白为什么我的代码没有按顺序运行......下面的代码不执行document.write部分,但它执行后的部分就好了。我认为这与时间有关,让浏览器执行。我尝试过在某些部分使用setTimeout,但它不是工作,或者我做错了。为什么我的JavaScript不能按顺序执行?

function isBrowserMobile() 
{ 
    var iPadAgent = navigator.userAgent.match(/iPad/i) != null; 
    var iPodAgent = navigator.userAgent.match(/iPhone/i) != null; 
    var AndroidAgent = navigator.userAgent.match(/Android/i) != null; 
    var webOSAgent = navigator.userAgent.match(/webOS/i) != null; 
    if (iPadAgent || iPodAgent || AndroidAgent || webOSAgent) 
    { 
     document.write("<body bgcolor='Orange'><b>Mobile browser detected!</b></body>"); 
     var choice = confirm("Do you want to visit the mobile site?") 
     if (choice) 
      mobile(); 
     else 
      desktop(); 
    } 
} 
+3

这个功能有太多不好的地方。无论如何,你能链接到一个[jsFiddle](http://jsfiddle.net)来证明问题吗? – Ryan

+3

*“它执行后的部分就好了”*:以及哪部分完全正确?如果'iPadAgent || iPodAgent || AndroidAgent || webOSAgent'为'false',则不执行'document.write'。 –

+0

您的桌面版本通过桌面()提供?或者它是一个NOOP? – alex

回答

1

编辑:

,我建议你不要使用document.write,但使用DOM,如下所示:

document.body.style.backgroundColor='Orange'; 
document.body.innerHTML='This is a text'; 

并在桌面浏览器中测试你的代码时,你可以添加true ||到if条件的开始。使用的innerText

我原来的答复这是一个功能尚未处理完毕而不是标准

0

浏览器很少更新页面。所以document.write已被执行,但结果可能不会显示,直到功能完成。正如Minitech所说,无论如何,这是一个非常垃圾的功能。您应该根据屏幕大小提问,而不是UA嗅探。

请注意,如果函数在文档加载完成后运行,则调用document.write将清除文档的全部内容,包括脚本。

+0

“浏览器在功能处理完成之前很少更新页面”你从哪里得到这些信息? – valentinas

+0

这就是他们的工作方式。浏览器不知道脚本何时完成修改页面,而不是在它们发生时显示更改(这会很烦人),它们将等待实用程序所有更改,然后显示单个更新。 'document.write'稍有不同,有些浏览器会立即显示结果,但其他浏览器可能会等待。 – RobG

+0

我不知道罗布,[简单测试](http://jsfiddle.net/bkDwe/)似乎支持@valentinas观察。你能否在规范中提供反演?或者什么? –