似魔鬼的 『 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办理毕业证成绩单.真实使馆及教育部学历 ...
 
随机推荐
- 记录git多人协作开发常用的流程,供新手参考
			
声明:博主写的博客都是经过自己总结或者亲测成功的实例,绝不乱转载.读者可放心看,有不足之处请私信我,或者给我发邮件:pangchao620@163.com. 写作目的: 记录一下我看完廖学锋老师的gi ...
 - 【转发】Html5 File Upload with Progress
			
Html5 File Upload with Progress Posted by Shiv Kumar on 25th September, 2010Senior Sof ...
 - PCIe 32GT/s 含义
			
如下: Jul 26 03:42:53 kernel: ixgbe 0000:01:00.1: PCI Express bandwidth of 32GT/s available Jul 26 03: ...
 - Linux Gitlab
			
一.简介 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源 ...
 - mysql 二进制文件增量备份
			
1.首先在my.cnf下添加二进制文件路径(windows下文件名称为my.ini) 在[mysqld]下添加 log-bin=mysql-bin 2.centos下默认安装mysql 5.6,数据默 ...
 - java 知识点随记
			
JAVA 读取配置文件: Properties props= new Properties();//文件在src目录下,编译会被加载到classpath下. Props.load(Test.class ...
 - UVALive 5061 Lightning Energy Report --LCA
			
题意:给一棵树,每次给u到v的路径上所有点加上一个值,最后输出每个点的权值(初始为0) 解法:每次在u,v间加k时,只要让u,v点的权值加上k,u,v的LCA处减去k(因为LCA的子树中加了两个k), ...
 - UESTC 764 失落的圣诞节 --RMQ/线段树
			
题意:n种物品,每种物品对不同的人都有不同的价值,有三个人选,第一个为普通学生,第二个是集,第三个是祈,集和祈可以选一样的,并且还会获得加分,集和祈选的普通学生都不能选,问三个人怎样选才能使总分最高. ...
 - AC日记——单词替换 1.7 21
			
21:单词替换 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区 ...
 - AC日记——大小写字母互换 openjudge 1.7 14
			
14:大小写字母互换 总时间限制: 1000ms 内存限制: 65536kB 描述 把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母. 输入 输入一行:待互换的字符串 ...