document.write() 为什么会清空页面
很久以前遇到的问题,放着放着就忘记去研究了
最近看到一篇文章总结一下
作者: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也可以看出来
最新文章
- 2.JAVA之GUI编程布局
- 【转载】<;mvc:annotation-driven />;注解意义
- [COPY] How to become a hacker
- Python开发【前端】:CSS
- Web 播放声音 — Flash 篇 (播放 AMR、WAV)
- Spark实战3:Maven_Java_HelloWorld
- sass开发过程中遇到的几个坑
- JS clientHeight,scrollHeight,offsetHeight,scrollTop,offsetTop概念
- .net 科学类型相关问题
- [IE编程] 多页面基于IE内核浏览器的代码示例
- android webview内容压线问题解决方法
- 【EJS】
- HTTP协议(四)
- Ubuntu无法访问windows分区
- HTTP请求响应机制与响应状态码
- ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
- 查看Linux下系统资源占用常用命令(top、free、uptime)
- ubuntu1604使用之旅——软件源更新(vim安装)
- Dubbo后台管理和监控中心部署
- 20155330 《网络对抗》 Exp9 web安全基础实践
热门文章
- 谁说微服务是Spring Cloud的独角戏?Service Mesh了解一下?
- MySql CPU彪高到百分之1000的排查思路
- VSCode 入门
- 压缩感知重构算法之OMP算法python实现
- Java修炼——String类_常用方法_常量池
- [TimLinux] myblog 首页创建
- Java中替换字符串中特定字符,replaceAll,replace,replaceFirst的区别
- CoderForces-Round60D(1117) Magic Gems
- E - Unimodal Array CodeForces - 831A
- BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)