天天看點

JavaScript在IE浏覽器和Firefox浏覽器中的差異總結

[b]1.HTML對象的 id 作為對象名的問題[/b]

IE:HTML 對象的 ID 可以作為 document 的下屬對象變量名直接使用Firefox:不支援

解決方法:使用document.getElementById替代document.all

[b]2.如果控件隻有name,沒有id, 用getElementById時:[/b]

IE:可以找到對象Firefox:傳回NULL

解決方法:所有控件必須設定ID屬性

[b]

3.Evel:[/b]

IE:支援,利用 eval(idName) 可以取得 id 為 idName 的 HTML 對象Firefox:不支援

解決方法:統一使用getElementById(idName) 代替 eval(idName)。

[b]4.Event:[/b]

IE:用全局對象window.eventFirefox:event隻能在事件發生的現場使用,在調用函數時傳入event對象

解決方法:使用之前做一下浏覽器類型判斷,各用各的。

[b]5.對象名稱中美元符号‘$’ 改為使用下劃線‘_’[/b]

[b]6.集合類對象問題[/b]

IE:可以使用()或[]擷取集合類對象Firefox:隻能使用[]擷取集合類對象

現有代碼中存在許多,不能在 Firefox 下運作

解決方法:統一使用[]擷取集合類對象。document.form.item(“itemName”) 這樣的語句改為document.form.elements["elementName"]

[b]7.變量名與某 HTML 對象 id 相同的問題[/b]

IE:不能使用與 HTML 對象 id 相同的變量名Firefox:可以使用

解決方法:在聲明變量時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運作。此外,最好不要取與 HTML 對象 id 相同的變量名,以減少錯誤。

[b]8.Event定位問題[/b]

IE:支援event.x 和event.yFirefox:支援event.pageX和event.pageY

解決方法,統一使用event.clientX和event.clientY,但是在Firefox中event.clientX 與 event.pageX 有微妙的差别(當整個頁面有滾動條的時候),不過大多數時候是等效的。如果要完全一樣,可以判斷浏覽器類型後對應使用。

[b]

9.父結點的問題[/b]

IE:parentElement parentElement.childrenFirefox:parentNode parentNode.childNodes

childNodes的下标的含義在IE和Firefox中不同,Firefox使用DOM規範,childNodes中會插入空白文本節點。一般可以通過node.getElementsByTagName()來回避這個問題。

當html中節點缺失時,IE和Firefox對parentNode的解釋不同。例如:

<form> <table> <input/> </table></form>

IE:input.parentNode的值為空節點Firefox:input.parentNode的值為form

解決方法:Firefox中節點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)

[b]10.const 問題[/b]

IE:不支援 const 關鍵字。如 const constVar = 32; 在IE中這是文法錯誤Firefox:支援

解決方法:不使用 const ,以 var 代替。

[b]

11.body 對象

[/b]

IE:在body标簽完全被讀入之後才存在Firefox:在body标簽沒有被浏覽器完全讀入之前就存在

[b]12.自定義屬性問題[/b]

IE:可以使用擷取正常屬性的方法來擷取自定義屬性,也可以使用getAttribute()擷取自定義屬性Firefox:隻能使用getAttribute()擷取自定義屬性.

解決方法:統一通過getAttribute()擷取自定義屬性

[b]13.event.srcElement問題[/b]

IE:even.srcElementFirefox:even.target

解決方法:使用時判斷浏覽器類型,各用各的。

[b]

14.模态和非模态視窗[/b]

IE:支援模态和非模态視窗Firefox:不支援

解決方法:直接使用window.open(pageURL,name,parameters)方式打開新視窗。如果需要将子視窗中的參數傳遞回父視窗,可以在子視窗中使用window.opener來通路父視窗。

[b]15.innerText

[/b]

IE:innerTextFirefox:textContent

[b]16.類似 obj.style.height = imgObj.height 的語句[/b]

IE:有效Firefox:無效

解決方法:統一使用obj.style.height = imgObj.height + ‘px’;