当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 ... 
随机推荐
- Codeforces Round #422 (Div. 2)  D. My pretty girl Noora 数学
			D. My pretty girl Noora In Pavlopolis University where Noora studies it was decided to hold beau ... 
- 前端遇上Go: 静态资源增量更新的新实践
			前端遇上Go: 静态资源增量更新的新实践https://mp.weixin.qq.com/s/hCqQW1F8FngPPGZAisAWUg 前端遇上Go: 静态资源增量更新的新实践 原创: 洋河 美团 ... 
- MTK平台下Battery驱动分析
			主要涉及代码: Kernel: kernel-3.10\drivers\power\mediatek\ kernel-3.10\drivers\misc\mediatek\mach\mt6580\&l ... 
- jquery和CSS3带倒影的3D万花筒旋转动画特效效果演示
			<!DOCTYPE html> <html> <head> <title></title> <meta charset='utf-8' ... 
- 常用bluetooth协议
			HFP: HFP(Hands-free Profile),让蓝牙设备可以控制电话,如接听.挂断.拒接.语音拨号等,拒接.语音拨号要视蓝牙耳机及电话是否支持. HSP: HSP 描述了 Bluetoot ... 
- RK3288 GPIO 输出问题【转】
			本文转载自:http://m.blog.csdn.net/jiangdou88/article/details/50158673 #define GPIO_BANK0 (0 ... 
- bfs 邻接表
			#include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int date; st ... 
- 礼物gift(DP)
			这道题的DP非常的有意思…… 一开始我们总是会以为这是一个背包问题,直接dp[0] = 0,dp[j] += dp[j-c[i]]进行转移.之后统计一下从dp[m-minn]~dp[m]的答案之和为结 ... 
- bzoj 2083 Intelligence test —— 思路+vector
			题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2083 先把所有子序列都存下来,总长度应该有限制,所以用 vector 存: 要做到 O(n) ... 
- iOS 中的 Block
			参考:链接 (1)block作为本地变量(local variable) returnType (^blockName)(parameterTypes) = ^returnType(parameter ... 
