在<script>标签内调用document.write()安全吗?

3

如果我在脚本标签内调用document.write(),我可以相信它会在主要浏览器上始终在同一时间执行(也就是在页面加载和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个回答

4
如果脚本标签没有被延迟 (<script defer>), 那么它们将按照出现的顺序运行,并且如果它们在 <head><body> 中,则会在 onload 之前运行。
在文档加载完成后(实际上是文档关闭后)使用 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

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接