当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 ...
随机推荐
- 使用zxing编写的二维码生成解析工具:QRCoder
zxing GitHub地址 QRCoder GitHub地址 TipDialog.java package com.wolf_pan; import java.util.Timer; import ...
- 解析腾讯企业邮箱到自己域名,设置mail的cname
之前注册了腾讯企业邮的免费邮箱,后来想把企业邮箱和域名绑定起来,发现了一些问题. 先来看正常的部分,假设你已经注册过了腾讯企业邮箱免费版,并且已经绑定好了域名. 然后在域名提供商那里设置域名解析的MX ...
- webpack 构建多页面应用
如何使用webpack构建多页面应用,这是一个我一直在想和解决的问题.网上也给出了很多的例子,很多想法.猛一看,觉得有那么点儿意思,但仔细看也就那样. 使用webpack这个构建工具,可以使我们少考虑 ...
- Awesome Adb——一份超全超详细的 ADB 用法大全【转】
本文转载自:https://juejin.im/entry/57c00fe4c4c971006179838a ADB,即 Android Debug Bridge,它是 Android 开发/测试人员 ...
- 如何修改织梦dedecms文章标题的最大长度
织梦dedecms默认的文章标题的最大长度为60字节,如果文章标题超过60字节将会自动截断,导致标题显示不全,这并非是我们所希望的.那么如何将标题长度改成我们想要的?只需简单两步即可解决问题. 1.进 ...
- AndroidStudio——Android SDK
前言 安卓的SDK包,跨过长城下载好的,分享出来一下~ Android Studio版本 | 3.4.1 下载地址 微云下载地址 | 链接:https://share.weiyun.com/5rm6l ...
- XMLHttp.send()不传参时必须传null吗?
xmlhttp的send是传递参数用的,但是只有在使用post方式提交请求的时候才有用如下:xmlhttp.open("post",url,true); ...xmlhttp.se ...
- 屏幕适配-使用autoLayout
当遇见xib中无法删除的控件时. 将这个错误的控件拖离本xib(第一个元素.xib文件是有许多元素组成的集合),确保这个xib是正确的.重新创建一个xib文件,将这个正确的xib元素整个复制过去. 在 ...
- I.MX6 android 源码下载
/************************************************************************* * I.MX6 android 源码下载 * 说明 ...
- bzoj 4756 Promotion Counting —— 线段树合并
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4756 合并子树的权值线段树: merge 返回 int 或者是 void 都可以. 代码如下 ...