在网页中使用document.write时遭遇的奇怪问题


Posted in Javascript onAugust 24, 2010

在前些日子的对Razor模板引擎向JavaScript移植进行研究的过程中,我发现如果使用document.write输出的内容中包含了调用外部的JavaScript的<script>标记,就可能出现一点问题——在这里面被调用的外部JavaScript可能会在不适当的时间被执行,对于IE和Opera来说,就是当write的参数中的所有其它部分内容都被解析之后,这些外部的JavaScript才会执行。

而在进一步研究中我又发现,对于Chrome和Safari这两个使用了WebKit网页排版引擎的浏览器来说,如果外部调用的JavaScript中再次调用document.write来写入另一个调用外部JavaScript的<script>标记,则第二次调用的外部JavaScript不会被执行,而之后的一些内容也会被打乱——实际情况其实要稍微复杂一点,跟第二级、第三级document.write调用的参数中的具体内容有关,因为时间和精力的关系我没有办法作更具体的测试了。

在经过这些研究以后,几大主流浏览器中唯一幸存的、能正确处理所有document.write调用的,就只有Firefox了。
Firefox的一种伪“多线程”事件处理的特性一直是让我很不见待的东西,这件事也算是对“各有所长”的一个佐证吧。

想要了解这个问题所引发的种种现象,可以下载write-test.zip,解压之后用各种浏览器打开其中的write-test.htm。

这几天我一直在尝试编写一个替用函数来解决这个问题,目前已经能顺利通过上面那个链接中的测试了。
如果接下来的几天之内没有发现什么明显的问题,我会把它发在博客上供大家参考。
测试代码,打包下载

Javascript 相关文章推荐
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
Jan 29 Javascript
HTML页面如何象ASP一样接受参数
Feb 07 Javascript
自写简单JS判断是否已经弹出页面
Oct 20 Javascript
JavaScript中清空数组的三种方法分享
Apr 07 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
IE8 内存泄露(内存一直增长 )的原因及解决办法
Apr 06 Javascript
基于iScroll实现内容滚动效果
Mar 21 Javascript
Vuex入门到上手教程
Jun 20 Javascript
vue.js内置组件之keep-alive组件使用
Jul 10 Javascript
新手简单了解vue
May 29 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
Vuex的各个模块封装的实现
Jun 05 Javascript
javascript下string.format函数补充
Aug 24 #Javascript
javascript下利用arguments实现string.format函数
Aug 24 #Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
Aug 24 #Javascript
js null,undefined,字符串小结
Aug 21 #Javascript
javascript中的float运算精度实例分析
Aug 21 #Javascript
Firebug入门指南(Firefox浏览器)
Aug 21 #Javascript
jquery插件之easing 动态菜单
Aug 21 #Javascript
You might like
2.PHP入门
2006/10/09 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
PDO::query讲解
2019/01/29 PHP
Jquery Change与bind事件代码
2011/09/29 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
react router 4.0以上的路由应用详解
2017/09/21 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
浅谈vue.js导入css库(elementUi)的方法
2018/03/09 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
python opencv实现图像边缘检测
2019/04/29 Python
Python timeit模块原理及使用方法
2020/10/10 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
python unichr函数知识点总结
2020/12/16 Python
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
酒店司机岗位职责
2013/12/14 职场文书
满月酒答谢词
2014/01/14 职场文书
护理专科自荐书范文
2014/02/18 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
基层党组织整改方案
2014/10/25 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书