script 的 defer 问题
来源:互联网 发布:centos终端输入中文 编辑:程序博客网 时间:2024/04/29 09:39
数以亿计[web]窗体使用了[script]标签,估计有不少人都遇到了类似的麻烦。麻烦是什么呢?
[script]标签有一个属性[defer],其作用是标识该[script]的执行在页面完全载入之后,并鬼使神差的使[src]属性失去了的功效。这无形中限制了一些操作,如:document.write()。
真实世界里程序员 XX 在一次项目中碰到这样一种情况。该项目的终极目标是提供一段 HTML+CSS 的文本,并在使用该文本的[web]窗体上正常显示出来。[web]窗体里使用了这句话:
<script type="text/javascript"><!--
__BitAuto_AutoSense_200707 = "{127CF09A-2B87-4f6e-9D37-FC7B894C7521}";
__BitAuto_AutoSense_200707_Version = "1.0";
-->
</script>
<script type="text/javascript" src="http://autosense.bitauto.com/JScript.js"></script>
别小看这句话啊,它真的完成了这个目标哦。
事过变迁,NB 的 YY 将这句话修改成了:
<script type="text/javascript"><!--
__BitAuto_AutoSense_200707 = "{127CF09A-2B87-4f6e-9D37-FC7B894C7521}";
__BitAuto_AutoSense_200707_Version = "1.0";
-->
</script>
<script defer type="text/javascript" src="http://autosense.bitauto.com/JScript.js"></script>
这下子完了,这句话不管用了。因为 http://autosense.bitauto.com/JScript.js 使用到了 document.write()。它在[web]窗体完全载入后重新[write]了。
在 XX 痛苦的时候,BB 和 CC 出现了,使用他们的“阴谋”和“诡计”终于想出了这么一招。记住:不是《葵花宝典》。
[中间广告]
{
这里提到的BB是兔子,CC是毛驴
在此非常感谢BB和CC的帮助...
}
<script type="text/javascript" src="http://autosense.bitauto.com/tJScript.js"></script>
<script type="text/javascript" id="bitauto_autosense_script"></script>
<div id="bitauto_autosense" class="bitauto_autosense"></div>
<link type="text/css" rel="stylesheet" href="http://autosense.bitauto.com/style/sohu.css"></link>
思路是:使用一个[script]下载那段前面提到的 HTML+CSS 的文本,在下载的同时使用[appendChild()]挂到[div]上去。
疑问是:为什么不使用XMLHttpRequest下载呢?
答案是:下载方和提供下载方处于不同的URL地址,出现跨域的安全验证,这会让一批人因烦而死。
以下是 http://autosense.bitauto.com/tJScript.js 内容。
// 浏览器类型
var __Browser = new Object();
__Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
__Browser.isIE = window.ActiveXObject ? true : false;
__Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
__Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
var __bitauto_autosense = {
Version: "1.0",
CharSet: "gb2312",
EffectAreaID: "",
AutoSenseUrl: "http://autosense.bitauto.com/Autosense.aspx",
DynamicLoadJavaScript: function() {
this.AutoSenseUrl = "http://autosense.bitauto.com/tAutosense.aspx";
this.AutoSenseUrl += "?c=" + this.CharSet;
this.AutoSenseUrl += "&t=" + this.EffectAreaID;
this.AutoSenseUrl += "&d=bitauto_autosense";
document.getElementById("bitauto_autosense_script").src = this.AutoSenseUrl;
},
AppendHTML: function( _EffectAreaID, _Version ) {
this.EffectAreaID = _EffectAreaID;
this.Version = _Version;
if( this.Version == "1.0" )
{
this.AutoSenseUrl += "?c=" + __CharSet
this.AutoSenseUrl += "&t=" + __EffectAreaID;
document.write( "<script language='javascript' src='" + __JScript_Src + "'></script>" );
}
else if( this.Version == "1.1" )
{
if( window.attachEvent )
{
window.attachEvent( "onload", this.DynamicLoadJavaScript );
}
if( window.addEventListener )
{
window.addEventListener( "load", this.DynamicLoadJavaScript, true );
}
}
}
}
// 当前访问页面编码格式
if( __Browser.isIE ) { __bitauto_autosense.CharSet = document.charset; }
if( __Browser.isFirefox ) { __bitauto_autosense.CharSet = document.characterSet; }
// 样式有效范围编码
if( typeof( __BitAuto_AutoSense_200707 ) != 'undefined' )
{
__bitauto_autosense.EffectAreaID = __BitAuto_AutoSense_200707;
}
// 输出[autosense]广告
__bitauto_autosense.AppendHTML( "{127CF09A-2B87-4f6e-9D37-FC7B894C7521}", "1.1" );
[script]标签有一个属性[defer],其作用是标识该[script]的执行在页面完全载入之后,并鬼使神差的使[src]属性失去了的功效。这无形中限制了一些操作,如:document.write()。
真实世界里程序员 XX 在一次项目中碰到这样一种情况。该项目的终极目标是提供一段 HTML+CSS 的文本,并在使用该文本的[web]窗体上正常显示出来。[web]窗体里使用了这句话:
<script type="text/javascript"><!--
__BitAuto_AutoSense_200707 = "{127CF09A-2B87-4f6e-9D37-FC7B894C7521}";
__BitAuto_AutoSense_200707_Version = "1.0";
-->
</script>
<script type="text/javascript" src="http://autosense.bitauto.com/JScript.js"></script>
别小看这句话啊,它真的完成了这个目标哦。
事过变迁,NB 的 YY 将这句话修改成了:
<script type="text/javascript"><!--
__BitAuto_AutoSense_200707 = "{127CF09A-2B87-4f6e-9D37-FC7B894C7521}";
__BitAuto_AutoSense_200707_Version = "1.0";
-->
</script>
<script defer type="text/javascript" src="http://autosense.bitauto.com/JScript.js"></script>
这下子完了,这句话不管用了。因为 http://autosense.bitauto.com/JScript.js 使用到了 document.write()。它在[web]窗体完全载入后重新[write]了。
在 XX 痛苦的时候,BB 和 CC 出现了,使用他们的“阴谋”和“诡计”终于想出了这么一招。记住:不是《葵花宝典》。
[中间广告]
{
这里提到的BB是兔子,CC是毛驴
在此非常感谢BB和CC的帮助...
}
<script type="text/javascript" src="http://autosense.bitauto.com/tJScript.js"></script>
<script type="text/javascript" id="bitauto_autosense_script"></script>
<div id="bitauto_autosense" class="bitauto_autosense"></div>
<link type="text/css" rel="stylesheet" href="http://autosense.bitauto.com/style/sohu.css"></link>
思路是:使用一个[script]下载那段前面提到的 HTML+CSS 的文本,在下载的同时使用[appendChild()]挂到[div]上去。
疑问是:为什么不使用XMLHttpRequest下载呢?
答案是:下载方和提供下载方处于不同的URL地址,出现跨域的安全验证,这会让一批人因烦而死。
以下是 http://autosense.bitauto.com/tJScript.js 内容。
// 浏览器类型
var __Browser = new Object();
__Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
__Browser.isIE = window.ActiveXObject ? true : false;
__Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
__Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
var __bitauto_autosense = {
Version: "1.0",
CharSet: "gb2312",
EffectAreaID: "",
AutoSenseUrl: "http://autosense.bitauto.com/Autosense.aspx",
DynamicLoadJavaScript: function() {
this.AutoSenseUrl = "http://autosense.bitauto.com/tAutosense.aspx";
this.AutoSenseUrl += "?c=" + this.CharSet;
this.AutoSenseUrl += "&t=" + this.EffectAreaID;
this.AutoSenseUrl += "&d=bitauto_autosense";
document.getElementById("bitauto_autosense_script").src = this.AutoSenseUrl;
},
AppendHTML: function( _EffectAreaID, _Version ) {
this.EffectAreaID = _EffectAreaID;
this.Version = _Version;
if( this.Version == "1.0" )
{
this.AutoSenseUrl += "?c=" + __CharSet
this.AutoSenseUrl += "&t=" + __EffectAreaID;
document.write( "<script language='javascript' src='" + __JScript_Src + "'></script>" );
}
else if( this.Version == "1.1" )
{
if( window.attachEvent )
{
window.attachEvent( "onload", this.DynamicLoadJavaScript );
}
if( window.addEventListener )
{
window.addEventListener( "load", this.DynamicLoadJavaScript, true );
}
}
}
}
// 当前访问页面编码格式
if( __Browser.isIE ) { __bitauto_autosense.CharSet = document.charset; }
if( __Browser.isFirefox ) { __bitauto_autosense.CharSet = document.characterSet; }
// 样式有效范围编码
if( typeof( __BitAuto_AutoSense_200707 ) != 'undefined' )
{
__bitauto_autosense.EffectAreaID = __BitAuto_AutoSense_200707;
}
// 输出[autosense]广告
__bitauto_autosense.AppendHTML( "{127CF09A-2B87-4f6e-9D37-FC7B894C7521}", "1.1" );
- script 的 defer 问题
- <script defer>中defer的作用
- Script中defer的作用
- script的defer和async
- script的defer属性的应用(转帖)
- 姚博文 Script中defer的作用
- script里面的defer和async
- script标签的defer和async属性
- script标签的defer和async属性
- script中的"DEFER"属性
- script中defer属性
- Script中的Defer属性
- script defer属性
- async,defer for script
- script标签的属性 async 和 defer 的区别
- script标签中async,defer两个属性的区别
- script标签中defer和async属性的使用
- script标签中defer和async属性的区别
- FrameSet 与 IFrame 彻底剖析
- IIS日志问题
- ms sql server2005 系统表知多少
- 点击 > 100,000 & 原创文章 = 100
- 《沁园春·长沙》
- script 的 defer 问题
- 也许履历表可以这样填
- 招聘网站遭遇尴尬
- 猎头收费为什么这么高?
- 猎头经验谈 - 猎头博客
- 上海猎头被绑架
- 爬行程序[ApacheLoader]
- 猎头经验谈 - 猎头博客 II (睡觉的时候也猎头)
- 用遗传算法加强足球游戏的人工智能