先来看个例子:

<!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的更多相关文章

  1. <script>document.write(location.href)</script>

    <script>document.write(location.href)</script> 什么意思?

  2. 为什么使用 document.write 需要将</script>拆分开

    福州SEO:细心点的朋友可能会注意到,有些网站使用document.write动态加载JS的时候需要把</script>拆分开来写?如下面的例子所示: <script type='t ...

  3. 去掉你代码里的 document.write("<script...

    在传统的浏览器中,同步的 script 标签是会阻塞 HTML 解析器的,无论是内联的还是外链的,比如: <script src="a.js"></script& ...

  4. java script第一篇(按钮全选的实现)

    今天刚学了java script,记录下学习新知识的点滴.以下是操作步骤.鉴于我是初级者,如有错误,恳请读者指正.万分谢谢. 1.新建一个文档(用NotePad软件,为了使得在浏览器中打开不是乱码,在 ...

  5. 深入理解DOM节点类型第七篇——文档节点DOCUMENT

    × 目录 [1]特征 [2]快捷访问 [3]文档写入 前面的话 文档节点document,隶属于表示浏览器的window对象,它表示网页页面,又被称为根节点.本文将详细介绍文档节点document的内 ...

  6. 闲扯 『 document.write 』

    初春的晚上,闲来无事,聊聊 document.write 方法. document.write 使用方式非常简单,把 "字符串化"(不好意思,这可能是我自己创造的名词)的 html ...

  7. 当target属性在XHTML script中无效时

    <a href="#" target=_blank></a>target此属性能够使链接在新窗口打开,但是在XHTML script中无效时. 那么解决方案 ...

  8. Java Script

    一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...

  9. HTML DOM 实例-Document 对象

    使用 document.write() 向输出流写文本 <html><body><script type="text/javascript">d ...

随机推荐

  1. 【bzoj3671】[Noi2014]随机数生成器

    优先按照它说明的方法处理数组 然后为了让数列中尽可能多的出现小的数字 所以1是必须要出现的,这样才能使整个数列的排序后字典序最小. 我们思考,如果2也能在这个数列中那就最好不过了 但是2有可能不在这个 ...

  2. (24) java web的struts2框架的使用-action参数自动封装与类型转换

    structs可以对参数进行自动封装,做法也很简单. 一,action参数自动封装: 1,可以直接在action类中,声明public的属性,接受参数. 2,属性也是是private,如果是priva ...

  3. javascript查找子节点时,html里的换行可能会被当成节点

    1.直接去HTML里找到该换行的地方去掉换行 2.写一个方法把元素类型为空格而且是文本都删除 function del_ff(elem){ var elem_child = elem.childNod ...

  4. Java DES加密解密

    import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpe ...

  5. Android gif 录屏

    /********************************************************************************** * Android gif 录屏 ...

  6. POJ1113:Wall (凸包:求最小的多边形,到所有点的距离大于大于L)

    Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the ...

  7. NC文件的处理【netcdf】

    NC是气象领域数据的标准格式之一. 能够更好的存储格点数据. 下面为测试NC文件的读写. git:https://git.oschina.net/ipnunu/nctest pom.xml <p ...

  8. J20170509-hm

    インスペクタ  巡查员 スライス   切片

  9. poj1837【背包】

    题意: 有一根杆子,给出一些杆子上的位置,位置上能放重物,再给出一些重物的重量. 重物都需要被使用,但是位置不一定都要用到. 问你能有多少种方法让这个杆子平衡. 思路: 在位置上是0/1背包思想,取或 ...

  10. hdoj1257【疑问】(贪心)

    这完全可以达到3*1e4个啊...如果这样子,这复杂度就炸了吧?... #include<iostream> #include<cstdio> #include<math ...