加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用js的document.write覆盖(替换)网页问题

(2020-04-30 12:36:43)
标签:

js

分类: http相关

 js中document.write()方法是可以将文本或标签写入在要显示的网页中,当然大部分人都是用它来创建实时脚本、实时样式表等等。

 
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的方法里,然后等待完网页输出后再来调用,这也会出现替换网页的效果,总而言之这句话最好就是输出完成之前调用。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有