長(zhǎng)久以來JavaScript兼容性一直是Web開發(fā)者的一個(gè)主要問題 。在正式規(guī)范、事實(shí)標(biāo)準(zhǔn)以及各種實(shí)現(xiàn)之間的存在的差異讓許多開發(fā)者日夜煎熬 。為此 , 主要從以下幾方面差異總結(jié)IE和Firefox的Javascript兼容性:
復(fù)制代碼 代碼如下:
一、函數(shù)和方法差異;
二、樣式訪問和設(shè)置;
三、DOM方法及對(duì)象引用;
四、事件處理;
五、其他差異的兼容處理 。
一、函數(shù)和方法差異
1. getYear()方法
【分析說明】先看一下以下代碼:
復(fù)制代碼 代碼如下:
var year= new Date().getYear();
document.write(year);
在IE中得到的日期是"2010" , 在Firefox中看到的日期是"110" , 主要是因?yàn)樵?Firefox 里面 getYear 返回的是 "當(dāng)前年份-1900" 的值 。
【兼容處理】加上對(duì)年份的判斷 , 如:
復(fù)制代碼 代碼如下:
var year= new Date().getYear();
year = (year1900?(1900 year):year);
document.write(year);
也可以通過 getFullYear getUTCFullYear 去調(diào)用:
復(fù)制代碼 代碼如下:
var year = new Date().getFullYear();
document.write(year);
2. eval()函數(shù)
【分析說明】在IE中 , 可以使用eval("idName")或getElementById("idName")來取得id為idName的HTML對(duì)象;Firefox下只能使用getElementById("idName")來取得id為idName的HTML對(duì)象 。
【兼容處理】統(tǒng)一用getElementById("idName")來取得id為idName的HTML對(duì)象 。
3. const聲明
【分析說明】在 IE 中不能使用 const 關(guān)鍵字 。如:
復(fù)制代碼 代碼如下:
const constVar = 32;
在IE中這是語法錯(cuò)誤 。
【兼容處理】不使用 const , 以 var 代替 。
4. var
【分析說明】請(qǐng)看以下代碼:
復(fù)制代碼 代碼如下:
echo=function(str){
document.write(str);
}
這個(gè)函數(shù)在IE上運(yùn)行正常 , Firefox下卻報(bào)錯(cuò)了 。
【兼容處理】而在echo前加上var就正常了 , 這個(gè)就是我們提到var的目的 。
5. const 問題
【分析說明】在 IE 中不能使用 const 關(guān)鍵字 。如 const constVar = 32; 在IE中這是語法錯(cuò)誤 。
【解決方法】不使用 const , 以 var 代替 。
二、樣式訪問和設(shè)置
1. CSS的"float"屬性
【分析說明】Javascript訪問一個(gè)給定CSS 值的最基本句法是:object.style.property , 但部分CSS屬性跟Javascript中的保留字命名相同 , 如"float" , "for" , "class"等 , 不同瀏覽器寫法不同 。
在IE中這樣寫:
復(fù)制代碼 代碼如下:
document.getElementById("header").style.styleFloat = "left";
在Firefox中這樣寫:
復(fù)制代碼 代碼如下:
document.getElementById("header").style.cssFloat = "left";
【兼容處理】在寫之前加一個(gè)判斷 , 判斷瀏覽器是否是IE:
復(fù)制代碼 代碼如下:
if(document.all){ //
document.getElementById("header").style.styleFloat = "left";
}
else{ //非ie 時(shí)為undefined
document.getElementById("header").style.cssFloat = "left";
}
2. 訪問label標(biāo)簽中的"for"
【分析說明】和"float"屬性一樣 , 同樣需要使用不現(xiàn)的句法區(qū)分來訪問label標(biāo)簽中的"for" 。
在IE中這樣寫:
復(fù)制代碼 代碼如下:
var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("htmlFor");
在Firefox中這樣寫:
復(fù)制代碼 代碼如下:
var myObject = document.getElementById("myLabel");
var myAttribute = myObject.getAttribute("for");
【兼容處理】解決的方法也是先 判斷瀏覽器類型 。
3. 訪問和設(shè)置class屬性
【分析說明】同樣由于class是Javascript保留字的原因 , 這兩種瀏覽器使用不同的 JavaScript 方法來獲取這個(gè)屬性 。
IE8.0之前的所有IE版本的寫法:
復(fù)制代碼 代碼如下:
推薦閱讀
- 沈銀燈為什么要?dú)⑺咎?
- 拼多多無門檻券退貨會(huì)退回嗎
- 稻殼模板怎么免費(fèi)去水印
- 小米電量多少充電合適
- 84消毒液和洗潔精一起有毒嗎
- 拼多多拒收會(huì)自動(dòng)退款嗎
- 奧迪車雨傘放在什么位置
- 方舟惡魔島在哪里
- C168靜音模式和非靜音模式的快速轉(zhuǎn)換
- 抖音怎么設(shè)置自動(dòng)播放
