使用js的document.write覆盖(替换)网页问题
(2020-04-30 12:36:43)
标签:
js |
分类: http相关 |
document.write ('Hello world!')
document.write ('script src="//baidu.com/" id="a1" ')
document.write ('link href="//baidu.com/" rel="stylesheet" type="text/css"');
简单来说就是用s的document.write方法;在网页里头额外加载东西。
然而这个方法有一个地方需要注意的是网页被全部覆盖问题。首先我们要清楚它的原理,它是伴随着浏览器建立document(文档)时而打开的输出流,你看它名字就明白document(文档).write(输出)了。一般浏览器会建立window之后再建立document的,document打开输出流,输出那些标签还有代码。
直至document的输出流把所有该输出的输出了,才会关闭。我们谈及覆盖问题也就是在document输出流关闭后,你再来调用ocument.write方法,最后导致的结果就是覆盖。原因就是document的输出流已经关闭了,这时调用的ocument.write方法会再一次打开新的输出流,新的输出流会重新从文档(document)的最开始的地方输出,那么如果你输入一句Hello
world!的话,之前的所有代码将全部清除并再网页最顶端输出Hello world!。
以下错误示例
window. onload = function(){ document.write("Hello world!"); };
或者
$(function(){ document.write("Hello world!"); });
这两句话都是网页加载好后才运行的语句,就之前说的document输出流关闭后再调用write方法的意思,所以就会变成替换了。
避免网页替代的写法,就是再输出流使用中时,输出语句。你在网页的head标签或是body标签直接输出是没有问题的。再来你在js文件中直接调用document.write方法也是没有问题的,只不过别把document.write方法放进那些执行完毕的方法体里面就行了。
如果你把document.write方法写到某个function的方法里,然后等待完网页输出后再来调用,这也会出现替换网页的效果,总而言之这句话最好就是输出完成之前调用。

加载中…