document.write()
1、知识点
1、如果document.write()在DOMContentLoaded或load事件的回调函数中,当文档加载完成,则会先清空文档(自动调用document.open()),再把参数写入body内容的开头
2、在异步引入的js和DOMContentLoaded或load事件的回调函数中运行document.write(),
运行完后,最好手动关闭文档写入(document.close())
3、文档流是由浏览器创建,无权限手动关闭,document.close()函数只能够关闭由document.open()函数创建的文档流
4 、
异步
引用JavaScript时(例如test.js),test.js中必须先运行document.open()清空文档,然后才能运行document.write(),如果不先运行document.open(),直接运行document.write(),则无效且Chrome有如下提示:
这是因为在document.write写入外部js(例如jquery)时,加载会需要时间,会发生阻塞作用。警告台会有警示。解决方案是需要通过document.write()写入的外部js(例如jquery)可以通过异步加载方式解决,即添加async或者defer
document.write('<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" async ></script>')
6、还有一个问题就是接着第五步,你在test.js中通过
document.write('<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js" ></script>')
成功的加载了jquery,但是在下面使用时,会发现
$
未定义,这又是什么原因呢?其实还是上边的问题,就是加载需要时间,你在使用的时候,jquery还未加载完成,所以就出现了这个
$
未定义的情况。那怎么解决呢?很简单,用一个定时器延迟执行
。
window.onload
或者
DOMContentLoaded
事件是在文档内容完全加载完毕再去执行事件处理函数,当然文档流已经关闭了,这个时候执行doucment.writ()函数会自动调用document.open()函数创建一个新的文档流,并写入新的内容,再通过浏览器展现,这样就会覆盖原来的内容