通常我們?cè)谧鼍W(wǎng)站兼容性測(cè)試時(shí)會(huì)遇到一些諸如此類的問題,其他瀏覽都正常,不會(huì)出亂,偏偏某種瀏覽出亂,經(jīng)過無數(shù)的測(cè)試及調(diào)整還是找不出原因.針對(duì)這樣的情況,南昌網(wǎng)站建設(shè)公司工程課告訴您需要靜下心來找個(gè)是不是瀏覽器本身有問題,有時(shí)我們?cè)诰W(wǎng)上線時(shí)測(cè)試一切都正常,可是過了兩天測(cè)試又有問題,您也不要急著更改排版代碼,您可需要檢測(cè)下是不是瀏覽器有BGU.通俗地講就是"怪癖". 與能力檢測(cè)類似,怪癖檢測(cè)(quirks detection)的目標(biāo)是識(shí)別瀏覽器的特殊行為。但與能力檢測(cè)確認(rèn)瀏覽器支持什么能力不同,怪癖檢測(cè)是想要知道瀏覽器存在什么缺陷(“怪癖”也就是bug)。這通常需要運(yùn)行一小段代碼,以確定某一特性不能正常工作。例如,IE中存在一個(gè)bug,即如果某個(gè)實(shí)列屬性與標(biāo)記為[[DontEnum]]的某個(gè)原型屬性同名,那么該實(shí)例屬性將不會(huì)出現(xiàn)在fon-in循環(huán)當(dāng)中??梢允褂萌缦麓a來檢測(cè)這種“怪癖”:
var hasDontEnumQuirk=function(){
var o=(toString:functionI)t));
for(var prop in o){
if (prop=="toString"){
return false;
}
}
return true:
}();
以上代碼通過一個(gè)匿名函數(shù)來測(cè)試該“怪癖”,函數(shù)中創(chuàng)建了一個(gè)帶有toString()方法的對(duì)象。 在正確的ECMAScript實(shí)現(xiàn)中,toString應(yīng)該在for-in循環(huán)中作為屬性返回。
另一個(gè)經(jīng)常需要檢測(cè)的“怪癖”是Safari 3.0以前版本會(huì)枚舉被隱藏的屬性??梢杂孟旅娴暮瘮?shù)來檢測(cè)該“怪癖”:
var hasEnumShadowsQuirk=function(){
var o={toString:function()t});
var count=O;
for (var prop in o){
if (prop=="toString"){
count++;
)
)
return (count>1);
}();
如果瀏覽器存在這個(gè)bug,那么使用for-in循環(huán)枚舉帶有自定義的toString()方法的對(duì)象,就會(huì)返回兩個(gè)toString的實(shí)例。
一般來說,“怪癖”都是個(gè)別瀏覽器所獨(dú)有的,而且通常被歸為bug。在相關(guān)瀏覽器的新版本中,這些問題可能會(huì)也可能不會(huì)被修復(fù)。由于檢測(cè)“怪癖”涉及運(yùn)行代碼,因此南昌網(wǎng)站設(shè)計(jì)公司工程師建議僅檢測(cè)那些對(duì)你有直接影響的“怪癖”,而且最好在腳本一開始就執(zhí)行此類檢測(cè),以便盡早解決問題。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://m.gimmickmag.com 如轉(zhuǎn)載請(qǐng)注明出處!