在javascript中document.write,它是如何工作的?

时间:2013-08-29 00:17:47

标签: javascript

我正在从w3schools学习JavaScript,它讨论了如何“如果你在文档加载完成后执行document.write,整个HTML页面将被覆盖”,我从例子中看到这确实发生了,但“我不明白究竟发生了什么,网站似乎跳过了解释。我已经移动了部分脚本(               

<h1>My First Web Page</h1>

<p>My First Paragraph</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction()
{
document.write("Oops! The document disappeared!");
}
</script>

</body>
</html>

要查看从脚本中的不同点加载不同的部分是否会改变效果,并且没有任何反应。

我想知道在继续上课之前究竟发生了什么,所以如果有人能够简单地给我一个如何运作的简要总结,我会很感激。

2 个答案:

答案 0 :(得分:1)

如果您熟悉一般编程,那么您将了解stream,它代表您可以连续阅读或写入的内容,并且(通常)缺少随机访问。

想象一下,document对象包含一个隐藏在其中的流,该流表示来自Web服务器的原始文本响应,该响应由HTML文本组成。方法document.open()授予对此流的访问权。

当加载页面时(正如服务器中的字节到达浏览器一样),文档流已经打开并正在读取/写入。当文档加载完毕(即HTML本身,而不是<img />等外部资源)时,流将被关闭。

...这就是为什么在页面加载时使用document.write的原因(即<script>document.write("foo");</script>它将文本“foo”直接插入到文档流中,而调用document.write < em>在文件加载后导致流(从内部)重新打开(隐式),导致它被覆盖。

答案 1 :(得分:0)

取决于您使用的浏览器,会发生什么。直到最近,您的代码将在所有浏览器中使用文本替换页面,但最近在某些浏览器中实现已更改为忽略document.write调用,而不是先隐式调用document.open如果尚未调用document.write已经打电话了。

您可以在加载页面后使用document.open替换所有浏览器中的页面,但是您必须以正确的方式执行此操作,即首先调用{{1}}。