数以亿计[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" );