当document.write 遇到外联script
先来看个例子:
<!DOCTYPE html>
<html>
<head>
<title>测试 document.write</title>
<meta charset="utf-8">
<script type="text/javascript">
document.write('<script type="text/javascript" src="js/getnum.js"><\/script>');
document.write('<script type="text/javascript" src="js/jquery-1.3.2.js"><\/script>');
</script>
</head>
<body>
test document.write
</body>
</html>
//getnum.js
var nodes=document.getElementsByTagName('script');
alert(nodes.length);
//IE 3
//Chrome Firefox 2
运行结果为什么Chrome和Firefox的结果为2而IE为3呢?
在IE中,当document.write创建了一个外联的script标签后,外联js里面的代码不会立即被执行,而是等到document.write所在的script标签中的代码全部运行完了,才开始执行。所以在这个例子中,IE要等到第二个script标签页创建好才执行getnum.js中的代码。
而在Chrome和Firefox中,它们是在document.write创建script标签立即执行该js中的内容,执行完后再继续执行下一条document.write
运用场景:参看司徒大神的javascript框架设计一书(第19页),例子稍微改了下= =。
<!DOCTYPE html>
<html>
<head>
<title>测试 readyState</title>
<meta charset="utf-8">
<script type="text/javascript">
document.write('<script type="text/javascript" src="js/geturl.js"><\/script>');
document.write('<script type="text/javascript" src="js/jquery-1.3.2.js"><\/script>');
</script>
</head>
<body>
test readyState
</body>
</html>
var nodes=document.getElementsByTagName('script');
if(window.VBArray){//如果是IE浏览器
for(var i=0,node;node=nodes[i++];){//注意这里,for循环的判断条件永远为真,所以它是个死循环,好在循环体中有break语句可以跳出循环。
if(node.readyState==="interactive"){
break;
}
}
//这样也可以
/*
var i=0;
while(node=nodes[i++]){
if(node.readyState==="interactive"){
break;
}
}
*/
}else{
node=nodes[nodes.length-1];
}
//test
alert(node.src);
// file:///D:/wamp/www/test/js/geturl.js
最新的mass.js中没有找到这个getBashPath方法,大概是在13年的版本?
当document.write 遇到外联script的更多相关文章
- <script>document.write(location.href)</script>
<script>document.write(location.href)</script> 什么意思?
- 为什么使用 document.write 需要将</script>拆分开
福州SEO:细心点的朋友可能会注意到,有些网站使用document.write动态加载JS的时候需要把</script>拆分开来写?如下面的例子所示: <script type='t ...
- 去掉你代码里的 document.write("<script...
在传统的浏览器中,同步的 script 标签是会阻塞 HTML 解析器的,无论是内联的还是外链的,比如: <script src="a.js"></script& ...
- java script第一篇(按钮全选的实现)
今天刚学了java script,记录下学习新知识的点滴.以下是操作步骤.鉴于我是初级者,如有错误,恳请读者指正.万分谢谢. 1.新建一个文档(用NotePad软件,为了使得在浏览器中打开不是乱码,在 ...
- 深入理解DOM节点类型第七篇——文档节点DOCUMENT
× 目录 [1]特征 [2]快捷访问 [3]文档写入 前面的话 文档节点document,隶属于表示浏览器的window对象,它表示网页页面,又被称为根节点.本文将详细介绍文档节点document的内 ...
- 闲扯 『 document.write 』
初春的晚上,闲来无事,聊聊 document.write 方法. document.write 使用方式非常简单,把 "字符串化"(不好意思,这可能是我自己创造的名词)的 html ...
- 当target属性在XHTML script中无效时
<a href="#" target=_blank></a>target此属性能够使链接在新窗口打开,但是在XHTML script中无效时. 那么解决方案 ...
- Java Script
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- HTML DOM 实例-Document 对象
使用 document.write() 向输出流写文本 <html><body><script type="text/javascript">d ...
随机推荐
- Hadoop提供的reduce函数中Iterable 接口只能遍历一次的问题
今天在写MapReduce中的reduce函数时,碰到个问题,特此记录一下: void reduce(key, Iterable<*>values,...) { for(* v:value ...
- split+ Pattern切割字符串
今天在对一个String对象进行拆分的时候,总是无法到达预计的结果.呈现数据的时候出现异常,后来debug之后才发现,错误出在String spilt上,于是开始好好研究下这东西,开始对api里的sp ...
- 启用了不安全的HTTP方法解决办法 IBM APPSCAN
启用了不安全的HTTP方法解决办法 IBM APPSCAN 安全风险: 可能会在Web 服务器上上载.修改或删除Web 页面.脚本和文件. 可能原因: Web 服务器 ...
- 使用URL dispatcher的范例
在上面的一篇文章中,我们介绍了怎样使用URL disptacher.在这篇文章中,我们来通过一个范例更进一步来了解怎样实现它. 1)创建一个具有URL dispatcher的应用 我们首先打开我们的S ...
- Rational Rose 2007 &Rational Rose 2003 下载及破解方法和汉化文件下载
Rational Rose 2007 &Rational Rose 2003 下载及破解方法和汉化文件下载 分类: 其它2010-08-10 13:28 12926人阅读 评论(4) 收藏 举 ...
- C:static 关键字、静态变量、跨类访问数据
static 在OC中的使用 参考1 参考2 参考3 参保4 参考5 跨类访问成员 参考 +号方法就是类方法(静态方法),说明不用创建对象,可以直接通过类型去直接调用这个方法,在OC ...
- 025--python初识类和对象
一.面向对象的定义 说到面向对象,我们先来看一下面向过程的定义:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么 ...
- python 类属性和实例属性、方法 访问权限问题
class Animal: cls_attr = 'cls_attr' _cls_attr = '_cls_attr' __cls_attr = '__cls_attr' def __init__(s ...
- CF487E Tourists【圆方树+tarjan+multiset+树剖+线段树】
圆方树不仅能解决仙人掌问题(虽然我仙人掌问题也没用过圆方树都是瞎搞过去的),还可以解决一般图的问题 一般图问题在于缩完环不是一棵树,所以就缩点双(包括双向边) 每个方点存他所在点双内除根以外的点的最小 ...
- bzoj 3576: [Hnoi2014]江南乐【博弈论】
这个东西卡常--预处理的时候要先把i%j,i/j都用变量表示,还要把%2变成&1-- 首先每一堆都是不相关子游戏,所以对于每一堆求sg即可 考虑暴力枚举石子数i,分割块数j,分解成子问题求xo ...