document.write()里面到底发生了什么?

时间:2015-10-01 13:44:17

标签: javascript dom

document.write()究竟是如何工作的?

当我这样做时

  document.write('<script src="file.js"><\/script>');

head 标记内的脚本标记内,document.write()会在 head 标记内插入标记。 (因为我是从 head 标签中调用它)

在页面完全加载后调用document.write时,它会隐式调用document.open()然后执行document.write()

我的问题是, 页面加载后,当我调用

document.write('hello');  //Inserts 'hello' within body tag

当我打电话

document.write('<script src="file.js"><\/script>'); //Inserts within head tag

那么document.write()究竟是如何知道我插入了什么类型的字符串?它也会解析字符串吗?

1 个答案:

答案 0 :(得分:4)

浏览器将document.write插入的所有数据视为来自服务器,就在包含write的脚本块之后。因此,如果您document.write('<script>alert(1);</' + 'script>');,浏览器将在当前版本之后添加另一个<script>元素。脚本块无论在何处,在头部或文档正文中都可以执行。

如果在加载页面后调用document.write,则会创建一个新文档。

您的第三个代码段将创建一个仅包含<script>标记的HTML文档。这不是有效的HTML,因此大多数浏览器会为您神奇地创建<html><head>元素,并将脚本元素放在那里。