很久以前遇到的问题,放着放着就忘记去研究了
最近看到一篇文章总结一下
作者:abloume
url:   http://blog.csdn.net/u013451157/article/details/78699253

先来一段代码实例:(代码1)

 <body>
<div>hello world</div> <script>
document.write();
document.write();
</script>
</body>

再来一段代码做比较(代码2)

 <body>
<div>hello world</div> <script>
window.onload = function(){
document.write();
document.write();
}
</script>
</body>

很明显看到问题,在window.onload后,为什么2次执行document.write()是成功的(并不会覆盖),但就覆盖(或清空)了前面的文档

其实在执行window.onload之前.浏览器了创建文档流 ---> 然后这时候再执行window.onload函数,
而执行document.write()函数会自动调用document.open()函数,创建一个新的文档流,写入新的内容,就会覆盖原来的内容
,
借用作者的原话:window.onload事件是在文档内容完全加载完毕再去执行事件处理函数,当然文档流已经关闭了,这个时候执行doucment.writ()函数会自动调用document.open()函数创建一个新的文档流,并写入新的内容,再通过浏览器展现,这样就会覆盖原来的内容

再看看一段代码实例(代码3)

 <body>
<div>hello world</div> <script>
window.onload = function(){
document.write();
document.close();
document.write();
}
</script>
</body>

这里就非常明显了,如果document.close()函数执行关闭,document.write()函数是执行了一次document.open()
所以只输出222

验证浏览器创建文档流能否关闭

就把第一段代码加上document.close()函数

 <body>
<div>hello world</div> <script>
document.close();
document.write();
document.write();
</script>
</body>

输出的依然是

借用作者的原话:很遗憾,文档流是由浏览器创建,无权限手动关闭,document.close()函数只能够关闭由document.open()函数创建的文档流

最后一个问题,window.onload执行为什么就能关闭
这是因为文档document对象改变为window对象在新作用域下

在代码3也可以看出来

最新文章

  1. 2.JAVA之GUI编程布局
  2. 【转载】&lt;mvc:annotation-driven /&gt;注解意义
  3. [COPY] How to become a hacker
  4. Python开发【前端】:CSS
  5. Web 播放声音 — Flash 篇 (播放 AMR、WAV)
  6. Spark实战3:Maven_Java_HelloWorld
  7. sass开发过程中遇到的几个坑
  8. JS clientHeight,scrollHeight,offsetHeight,scrollTop,offsetTop概念
  9. .net 科学类型相关问题
  10. [IE编程] 多页面基于IE内核浏览器的代码示例
  11. android webview内容压线问题解决方法
  12. 【EJS】
  13. HTTP协议(四)
  14. Ubuntu无法访问windows分区
  15. HTTP请求响应机制与响应状态码
  16. ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
  17. 查看Linux下系统资源占用常用命令(top、free、uptime)
  18. ubuntu1604使用之旅——软件源更新(vim安装)
  19. Dubbo后台管理和监控中心部署
  20. 20155330 《网络对抗》 Exp9 web安全基础实践

热门文章

  1. 谁说微服务是Spring Cloud的独角戏?Service Mesh了解一下?
  2. MySql CPU彪高到百分之1000的排查思路
  3. VSCode 入门
  4. 压缩感知重构算法之OMP算法python实现
  5. Java修炼——String类_常用方法_常量池
  6. [TimLinux] myblog 首页创建
  7. Java中替换字符串中特定字符,replaceAll,replace,replaceFirst的区别
  8. CoderForces-Round60D(1117) Magic Gems
  9. E - Unimodal Array CodeForces - 831A
  10. BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)