在<script> tag?</script>中调用document.write()是否安全?

时间:2011-03-11 03:27:12

标签: javascript html

如果我在脚本标记内调用document.write(),我是否可以相信它总是会在主要浏览器上同时执行(即在页面加载期间和 on onload事件之前) ?

此外,这适用于主流浏览器:

  <script ...>
     if (condition)
        document.write('<div ...>');
     else
        document.write('<span ...>');
  </script>
      ... // some content.

  <script ...>
     if (condition)
        document.write('</div>');
     else
        document.write('</span>');
  </script>

3 个答案:

答案 0 :(得分:4)

如果脚本标记没有延迟(<script defer>),那么它们按照它们出现的顺序运行,如果它们在<head><body>内,那么它们将在{onload之前运行1}}。

在加载正文后(文档实际关闭后)使用document.write是危险的,因为它会吹走文档。所以

setTimeout(function () { document.write('O Hai'); }, 1000)

是吹走文件的好方法。

他们必须按照出现的顺序写出的原因是,在第一个脚本标记完成执行之前,浏览器无法确定第二个脚本标记是否真的是脚本标记。考虑浏览器要处理的内容

<script>
if (Math.random() < 0.5) {
  document.write("<script>");
}
</script>
alert('One'); /*
<script>
alert('Two');
//*/</script>

答案 1 :(得分:1)

最好将这些函数放入函数中并使用body onload事件触发它们。或者,如果您不介意jquery依赖项, $(document).ready()

答案 2 :(得分:0)

document.write的定义是它将内容写入document.write的确切位置。这种行为在浏览器中是一致的。