在网页中使用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 相关文章推荐
Javascript学习笔记4 Eval函数
Jan 11 Javascript
JavaScript 学习历程和心得分享
Dec 12 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
Oct 20 Javascript
基于Angularjs实现分页功能
May 30 Javascript
jQuery实现二维码扫描功能
Jan 09 Javascript
深入理解Vue 的条件渲染和列表渲染
Sep 01 Javascript
webpack配置之后端渲染详解
Oct 26 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
微信小程序停止其他视频播放当前视频的实例代码
Dec 25 Javascript
微信小程序接入vant Weapp组件的详细步骤
Oct 28 Javascript
nestjs返回给前端数据格式的封装实现
Feb 22 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预定义常量
2006/12/25 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
Javascript 汉字字节判断
2009/08/01 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
微信小程序实现滑动删除效果
2017/05/19 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
vue2中filter()的实现代码
2017/07/09 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
电大本科自我鉴定
2014/02/05 职场文书
生日宴会策划方案
2014/06/03 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
教师党员个人自我评价
2015/03/04 职场文书
试用期转正工作总结2015
2015/05/28 职场文书
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL