在网页中使用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 相关文章推荐
9个javascript语法高亮插件 推荐
Jul 18 Javascript
javascript中this做事件参数相关问题解答
Mar 17 Javascript
用js代码改变单选框选中状态的简单实例
Dec 18 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
Jun 12 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
AngularJS路由实现页面跳转实例
Mar 03 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
JS回调函数基本定义与用法实例分析
May 24 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
Fetch超时设置与终止请求详解
May 18 Javascript
解决vue项目axios每次请求session不一致的问题
Oct 24 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 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
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
详解vue中组件参数
2018/07/09 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python使用pil生成图片验证码的方法
2015/05/08 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python实现时间序列可视化的方法
2019/08/06 Python
python实现人机五子棋
2020/03/25 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
盛大笔试题
2016/11/05 面试题
进程的查看和调度分别使用什么命令
2013/12/14 面试题
cf收人广告词大全
2014/03/14 职场文书
优秀纪检干部材料
2014/08/27 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
义诊活动总结
2015/02/04 职场文书
办公经费申请报告
2015/05/15 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书