似魔鬼的 『 document.write 』
在平时的工作中,楼主很少用 document.write 方法,一直觉得 document.write 是个危险的方法。楼主不用,并不代表别人不用,最近给维护的项目添了一点代码,更加深了我对 "似魔鬼" 的document.wirte 方法的印象。
如果没接触过 document.write,可以先看下楼主以前写的 闲扯 『 document.write 』,里面有很多不错的链接。
这个案例是这样的,有一些相似的内页,内页顶部有个一样的 banner,实现方式是引用了同一个 js 文件,而 js 内部的实现是用了 document.write 方法。
假设每个内页 html 代码如下:
<!-- 公共头 -->
<script src="data2.js"></script>
<!-- 以下为内页其他内容 -->
假设 data2.js 如下:
document.write("world<br/>");
接着我们要在该 banner 前再加个 banner,且这个文件已经帮你写好了,和 data2.js 一样用 document.write 方式实现。
假设 data1.js:
document.write("hello</br>");
我们当然希望在页面上,hello 出现在 world 前,我们修改 html 代码如下:
<script src="data1.js"></script>
<script src="data2.js"></script>
<!-- 以下为内页其他内容 -->
一点问题没有,两个 js 依次执行,每个 js 执行内部 document.write 方法,将内容同步输出到页面。但是问题是内页很多,一个个修改非常麻烦(或者可以全局替换?)。想到一个办法,将 data1.js 写在 data2.js 中,如下:
document.write("<script src='data1.js'></" + "script>");
document.write("world<br/>");
但是,ie8 下先出现的是 world 啊!不同的浏览器会用不同的顺序加载啊!具体链接还是可以参考我的前文。最后我把 data1.js 中的内容复制出来全粘贴到 data2.js 中,才算解决问题,不然真的没有想到更好的办法(除了给每个内页 html 加上脚本引用这么一行)。
反正我写 js 尽量不用 document.write 吧,太坑了。
2016.10.11 add: chrome 54 似乎要禁止 document.write 的使用了 Why you should avoid using document.write, specifically for scripts injection
似魔鬼的 『 document.write 』的更多相关文章
- 闲扯 『 document.write 』
初春的晚上,闲来无事,聊聊 document.write 方法. document.write 使用方式非常简单,把 "字符串化"(不好意思,这可能是我自己创造的名词)的 html ...
- 拾遗:『Linux Capability』
『Linux Capability』 For the purpose of performing permission checks, traditional UNIX implementations ...
- 『创意欣赏』20款精致的 iOS7 APP 图标设计
这篇文章给大家分享20款精致的 iOS7 移动应用程序图标,遵循图形设计的现代潮流,所有图标都非常了不起,给人惊喜.通过学习这些移动应用程序图标,设计人员可以提高他们的创作,使移动用户界面看起来更有趣 ...
- 『设计前沿』14款精致的国外 iOS7 图标设计示例
每天都有大量的应用程序发布到 iOS App Store 上,在数量巨大的应用中想要引起用户的主要,首要的就是独特的图标设计.这篇文章收集了14款精致的国外 iOS7 图标设计示例,希望能带给你设计灵 ...
- Github 恶搞教程(一起『玩坏』自己的 Github 吧)
最近在伯乐在线读到一篇趣文,<如何在 Github『正确』做贡献>,里面各种能人恶搞 Github 的『Public contributions』,下面截取几个小伙伴的战绩: 顺藤摸瓜,发 ...
- 『创意欣赏』30幅逼真的 3D 虚拟现实环境呈现
又到周末了,给大家分享30幅漂亮的 3D 虚拟现实环境呈现,放松一下.这些创造性的场景都是通过 3D 图形设计软件,结合三维现实环境渲染制作出来的.一起欣赏:) 您可能感兴趣的相关文章 20幅温馨浪漫 ...
- [TYVJ1827]『Citric II』一道防AK好题
时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 第二届『Citric杯』NOIP提高组模拟赛第一题 描述 Lemon认为在第一届『Citric』杯模拟赛中出的 ...
- 办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo
办理滑铁卢大学(本科)学历认证『微信171922772』UW学位证成绩单使馆认证University of Waterloo QQ/微信171922772办理毕业证成绩单.真实使馆及教育部学历认证★诚 ...
- 办理渥太华大学(本科)学历认证『微信171922772』Ottawa U学位证成绩单使馆认证University of Ottawa
办理渥太华大学(本科)学历认证『微信171922772』Ottawa U学位证成绩单使馆认证University of Ottawa QQ/微信171922772办理毕业证成绩单.真实使馆及教育部学历 ...
随机推荐
- 关于/etc/hosts文件
1,/etc/hosts,主机名何ip配置文件.hosts---The static table lookup for host name(主机名查询静态表) linux 的/etc/hosts是配置 ...
- linux基础-第七单元 用户、群组及权限的深入讨论
怎样查看文件的权限 ls命令详解 root用户及文件的安全控制 什么是root用户 用户分类 文件操作权限 文件操作权限的字符表示 chown chgrp 使用符号表示法设定文件或目录上的权限 chm ...
- Ubuntu14.02.2下安装JDK并配置Jetty服务器
首先第一步先取得JDK的安装文件,由于我的系统是64位的,所以安装包是jdk-7u80-linux-x64.gz 上传到unbuntu服务器下 执行tar -xvf jdk-7u80-linux-x6 ...
- STM32之USART库函数USART_SendData的bug
转载自:http://www.cnblogs.com/itloverhpu/p/3250537.html 1.最近在调试ATM32F103CB时发现,一串数据的最后一个字节总是发送不出去,用的是RS4 ...
- eclipse乱码解决方法
eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...
- [转]基于display:table的CSS布局
当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS ...
- NOIP2011多项式系数[快速幂|组合数|逆元]
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- 第16章 调色板管理器_16.4 一个DIB位图库的实现(1)
16.4.1自定义的 DIBSTRUCT结构体 字段 含义 PBYTE *ppRow ①指向位图视觉上最上面的一行像素.(不管是自下而上,还是自上而下) ②放在第一个字段,为的是后面定义宏时可方便访问 ...
- using关键字的使用
using语句的两个作用: 1)using可以导入命名空间 2)using可以释放对象占用的内存资源. 代码如下: using (SqlConnection con=new SqlConnection ...
- 在JAVA中ArrayList如何保证线程安全
[b]保证线程安全的三种方法:[/b]不要跨线程访问共享变量使共享变量是final类型的将共享变量的操作加上同步一开始就将类设计成线程安全的, 比在后期重新修复它,更容易.编写多线程程序, 首先保证它 ...