在网页中使用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 相关文章推荐
location.href语句与火狐不兼容的问题
Jul 04 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
Dec 12 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
Jun 04 Javascript
JavaScript面试题大全(推荐)
Sep 22 Javascript
jQuery排序插件tableSorter使用方法
Feb 10 Javascript
JS实现的四级密码强度检测功能示例
May 11 Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
Vue实现6位数密码效果
Aug 18 Javascript
vue微信分享的实现(在当前页面分享其他页面)
Apr 16 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
基于js实现判断浏览器类型代码实例
Jul 17 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
Nov 03 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 自定义错误处理函数的使用详解
2013/05/10 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
在python中安装basemap的教程
2018/09/20 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
基于Python和C++实现删除链表的节点
2020/07/06 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
党员个人思想汇报
2013/12/28 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
导游词开场白
2015/01/31 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年依法行政工作总结
2015/04/29 职场文书
青春雷锋观后感
2015/06/10 职场文书
小学运动会开幕词
2016/03/04 职场文书
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技