IE、FF、Chrome瀏覽器中的JS差異介紹
更新時(shí)間:2013年08月13日 14:49:55 作者:
到目前為止各瀏覽器的HTML標(biāo)準(zhǔn)或是JS標(biāo)準(zhǔn)都還未統(tǒng)一,但作為一個(gè)開(kāi)發(fā)人員,還是有需要了解JS在瀏覽器中的差異
因?yàn)闉g覽器公司各自為利益考慮,到目前為止各瀏覽器的HTML標(biāo)準(zhǔn)或是JS標(biāo)準(zhǔn)都還未統(tǒng)一。在平常的開(kāi)發(fā)中,我們常使用的JS框架基本已經(jīng)幫我們處理好了JS在各瀏覽器中的差異,但作為一個(gè)開(kāi)發(fā)人員,還是有需要了解JS在瀏覽器中的差異。
FF、Chrome:沒(méi)有window.event對(duì)象
FF、Chrome:沒(méi)有window.event對(duì)象,只有event對(duì)象,IE里只支持window.event,而其他主流瀏覽器兩者都支持,所以一般寫(xiě)成:function handle(e){e = e || event;}
獲取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本屬性支持el.name其余屬性僅支持el.getAttribute(name)
自定義屬性問(wèn)題
IE下,可以使用獲取常規(guī)屬性的方法來(lái)獲取自定義屬性,也可以使用 getAttribute() 獲取自定義屬性;Firefox下,只能使用 getAttribute() 獲取自定義屬性。
Ajax請(qǐng)求
IE: new ActiveXObject()
FF、Chrome:new XMLHttpRequest()
獲取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本屬性支持el.name其余屬性僅支持el.getAttribute(name)
innerText的使用
FF不支持innerText,它支持textContent來(lái)實(shí)現(xiàn)innerText,不過(guò)textContent沒(méi)有像innerText一樣考慮元素的display方式,所以不完全與IE兼容。如果不用textContent,字符串里面不包含HTML代碼也可以用innerHTML代替。
if(document.all){
document.getElementById('element').innerText = "mytext";
} else{
document.getElementById('element').textContent = "mytext";
}
獲取鼠標(biāo)指針的位置
計(jì)算出鼠標(biāo)指針的位置對(duì)你來(lái)說(shuō)可能是非常少見(jiàn)的,不過(guò)當(dāng)你需要的時(shí)候,在IE和Firefox中的句法是不同的。這里所寫(xiě)出的代碼將是最最基本的,也可能是某個(gè)復(fù)雜事件處理中的某一個(gè)部分。但他們可以解釋其中的異同點(diǎn)。同時(shí),必須指出的是結(jié)果相對(duì)于Firefox,IE會(huì)有更在的不同,這種方法本身就是有BUG的。
在IE中這樣寫(xiě):
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX;
myCursorPosition[1] = event.clientY;
在Firefox中這樣寫(xiě):
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.pageX;
myCursorPosition[1] = event.pageY;
獲取可見(jiàn)區(qū)域、窗口的大小
有時(shí),我們會(huì)需要找到瀏覽器的可視位置的大小,通常我們稱之為"可見(jiàn)區(qū)域"。
在IE中這樣寫(xiě):
var myBrowserSize = [0, 0];
myBrowserSize[0] = document.documentElement.clientWidth;
myBrowserSize[1] = document.documentElement.clientHeight;
在Firefox中這樣寫(xiě):
var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;
Alpha 透明
這并不是一個(gè)JavaScript句法問(wèn)題,而是源自于CSS的Alpha透明。但當(dāng)某個(gè)物體需要淡入/出則需要JavaScript來(lái)表現(xiàn),這是通過(guò)訪問(wèn)CSS的Alpha透明設(shè)置來(lái)完成的,通常在一個(gè)循環(huán)中完成。你需要通過(guò)來(lái)修改的JavaScript的代碼如下::
在IE中這樣寫(xiě):
#myElement { filter: alpha(opacity=50); }
在Firefox中這樣寫(xiě):
#myElement { opacity: 0.5; }
在IE中這樣寫(xiě):
var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";
在Firefox中這樣寫(xiě):
var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5";
CSS "float" 值
訪問(wèn)一個(gè)給定CSS 值的最基本句法是:object.style.property,使用駝峰寫(xiě)法來(lái)替換有連接符的值,例如,訪問(wèn)某個(gè)ID為"header"的<div>的 background-color值,我們使用如下句法:
document.getElementById("header").style.backgroundColor= "#ccc";
但由于"float"這個(gè)詞是一個(gè)JavaScript保留字,因此我們不能用object.style.float來(lái)訪問(wèn),這里,我們可以在兩種瀏覽器中這么做:
在IE中這樣寫(xiě):
document.getElementById("header").style.styleFloat = "left";
在Firefox中這樣寫(xiě):
document.getElementById("header").style.cssFloat = "left";
元素的推算樣式
JavaScript可以使用object.style.property句法,方便地在外部訪問(wèn)和修改某個(gè)CSS樣式,但其限制是這些句法只能取出已設(shè)的行內(nèi)樣式或者直接由JavaScript設(shè)定的樣式。并不能訪問(wèn)某個(gè)外部的樣式表。為了訪問(wèn)元素的"推算"樣式,我們可以使用下面的代碼:
在IE中這樣寫(xiě):
var myObject = document.getElementById("header");
var myStyle = myObject.currentStyle.backgroundColor;
在Firefox中這樣寫(xiě):
var myObject = document.getElementById("header");
var myComputedStyle = document.defaultView.getComputedStyle(myObject, null);
var myStyle = myComputedStyle.backgroundColor;
訪問(wèn)元素的"class"
"class"是JavaScript的一個(gè)保留字,在這兩個(gè)瀏覽器中我們使用如下句法來(lái)訪問(wèn)"class"。
在IE中這樣寫(xiě):
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("className");
在Firefox中這樣寫(xiě):
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("class");
FF、Chrome:沒(méi)有window.event對(duì)象
FF、Chrome:沒(méi)有window.event對(duì)象,只有event對(duì)象,IE里只支持window.event,而其他主流瀏覽器兩者都支持,所以一般寫(xiě)成:function handle(e){e = e || event;}
獲取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本屬性支持el.name其余屬性僅支持el.getAttribute(name)
自定義屬性問(wèn)題
IE下,可以使用獲取常規(guī)屬性的方法來(lái)獲取自定義屬性,也可以使用 getAttribute() 獲取自定義屬性;Firefox下,只能使用 getAttribute() 獲取自定義屬性。
Ajax請(qǐng)求
IE: new ActiveXObject()
FF、Chrome:new XMLHttpRequest()
獲取HTML元素
IE:支持el.name 、el.getAttribute(name)
FF、Chrome:基本屬性支持el.name其余屬性僅支持el.getAttribute(name)
innerText的使用
FF不支持innerText,它支持textContent來(lái)實(shí)現(xiàn)innerText,不過(guò)textContent沒(méi)有像innerText一樣考慮元素的display方式,所以不完全與IE兼容。如果不用textContent,字符串里面不包含HTML代碼也可以用innerHTML代替。
if(document.all){
document.getElementById('element').innerText = "mytext";
} else{
document.getElementById('element').textContent = "mytext";
}
獲取鼠標(biāo)指針的位置
計(jì)算出鼠標(biāo)指針的位置對(duì)你來(lái)說(shuō)可能是非常少見(jiàn)的,不過(guò)當(dāng)你需要的時(shí)候,在IE和Firefox中的句法是不同的。這里所寫(xiě)出的代碼將是最最基本的,也可能是某個(gè)復(fù)雜事件處理中的某一個(gè)部分。但他們可以解釋其中的異同點(diǎn)。同時(shí),必須指出的是結(jié)果相對(duì)于Firefox,IE會(huì)有更在的不同,這種方法本身就是有BUG的。
在IE中這樣寫(xiě):
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.clientX;
myCursorPosition[1] = event.clientY;
在Firefox中這樣寫(xiě):
var myCursorPosition = [0, 0];
myCursorPosition[0] = event.pageX;
myCursorPosition[1] = event.pageY;
獲取可見(jiàn)區(qū)域、窗口的大小
有時(shí),我們會(huì)需要找到瀏覽器的可視位置的大小,通常我們稱之為"可見(jiàn)區(qū)域"。
在IE中這樣寫(xiě):
var myBrowserSize = [0, 0];
myBrowserSize[0] = document.documentElement.clientWidth;
myBrowserSize[1] = document.documentElement.clientHeight;
在Firefox中這樣寫(xiě):
var myBrowserSize = [0, 0];
myBrowserSize[0] = window.innerWidth;
myBrowserSize[1] = window.innerHeight;
Alpha 透明
這并不是一個(gè)JavaScript句法問(wèn)題,而是源自于CSS的Alpha透明。但當(dāng)某個(gè)物體需要淡入/出則需要JavaScript來(lái)表現(xiàn),這是通過(guò)訪問(wèn)CSS的Alpha透明設(shè)置來(lái)完成的,通常在一個(gè)循環(huán)中完成。你需要通過(guò)來(lái)修改的JavaScript的代碼如下::
在IE中這樣寫(xiě):
#myElement { filter: alpha(opacity=50); }
在Firefox中這樣寫(xiě):
#myElement { opacity: 0.5; }
在IE中這樣寫(xiě):
var myObject = document.getElementById("myElement");
myObject.style.filter = "alpha(opacity=80)";
在Firefox中這樣寫(xiě):
var myObject = document.getElementById("myElement"); myObject.style.opacity = "0.5";
CSS "float" 值
訪問(wèn)一個(gè)給定CSS 值的最基本句法是:object.style.property,使用駝峰寫(xiě)法來(lái)替換有連接符的值,例如,訪問(wèn)某個(gè)ID為"header"的<div>的 background-color值,我們使用如下句法:
document.getElementById("header").style.backgroundColor= "#ccc";
但由于"float"這個(gè)詞是一個(gè)JavaScript保留字,因此我們不能用object.style.float來(lái)訪問(wèn),這里,我們可以在兩種瀏覽器中這么做:
在IE中這樣寫(xiě):
document.getElementById("header").style.styleFloat = "left";
在Firefox中這樣寫(xiě):
document.getElementById("header").style.cssFloat = "left";
元素的推算樣式
JavaScript可以使用object.style.property句法,方便地在外部訪問(wèn)和修改某個(gè)CSS樣式,但其限制是這些句法只能取出已設(shè)的行內(nèi)樣式或者直接由JavaScript設(shè)定的樣式。并不能訪問(wèn)某個(gè)外部的樣式表。為了訪問(wèn)元素的"推算"樣式,我們可以使用下面的代碼:
在IE中這樣寫(xiě):
var myObject = document.getElementById("header");
var myStyle = myObject.currentStyle.backgroundColor;
在Firefox中這樣寫(xiě):
var myObject = document.getElementById("header");
var myComputedStyle = document.defaultView.getComputedStyle(myObject, null);
var myStyle = myComputedStyle.backgroundColor;
訪問(wèn)元素的"class"
"class"是JavaScript的一個(gè)保留字,在這兩個(gè)瀏覽器中我們使用如下句法來(lái)訪問(wèn)"class"。
在IE中這樣寫(xiě):
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("className");
在Firefox中這樣寫(xiě):
var myObject = document.getElementById("header");
var myAttribute = myObject.getAttribute("class");
您可能感興趣的文章:
- js獲得指定控件輸入光標(biāo)的坐標(biāo)兼容IE,Chrome,火狐等多種主流瀏覽器
- C++獲取多瀏覽器上網(wǎng)歷史記錄示例代碼(支持獲取IE/Chrome/FireFox)
- 在firefox和Chrome下關(guān)閉瀏覽器窗口無(wú)效的解決方法
- flex chrome瀏覽器調(diào)試出現(xiàn)空白的解決方法
- javascript判斷chrome瀏覽器的方法
- js代碼判斷瀏覽器種類IE、FF、Opera、Safari、chrome及版本
- ZeroClipboard插件實(shí)現(xiàn)多瀏覽器復(fù)制功能(支持firefox、chrome、ie6)
- 如何實(shí)現(xiàn)chrome瀏覽器關(guān)閉頁(yè)面時(shí)彈出“確定要離開(kāi)此面嗎?”
- chrome瀏覽器當(dāng)表單自動(dòng)填充時(shí)如何去除瀏覽器自動(dòng)添加的默認(rèn)樣式
相關(guān)文章
JavaScript 學(xué)習(xí)筆記(十二) dom
新的一章的學(xué)習(xí)----Dom,重點(diǎn)啊2010-01-01js常用數(shù)組操作方法簡(jiǎn)明總結(jié)
這篇文章主要介紹了js常用數(shù)組操作方法簡(jiǎn)明總結(jié),直接上代碼,代碼中有詳細(xì)的注釋,需要的朋友可以參考下2014-06-06用js判斷頁(yè)面是否加載完成實(shí)現(xiàn)代碼
用document.onreadystatechange的方法來(lái)監(jiān)聽(tīng)狀態(tài)改變, 然后用document.readyState == “complete”判斷是否加載完成,需要的朋友可以參考下2012-12-12Javascript中常見(jiàn)的校驗(yàn)如域名、手機(jī)、郵箱等等
Javascript中常見(jiàn)的校驗(yàn)如:驗(yàn)證一般域名校驗(yàn),手機(jī)校驗(yàn),郵箱校驗(yàn),身份證校驗(yàn)等等,下面是具體的實(shí)現(xiàn),感興趣的朋友可以參考下2014-01-01簡(jiǎn)單的ajax連接庫(kù)分享(不用jquery的ajax)
自己寫(xiě)了一個(gè)簡(jiǎn)單的ajax連接庫(kù),沒(méi)有使用jquery的ajax,這個(gè)代碼要比jquery輕量,大家參考使用吧,2014-01-01