1. HTML 對象的 id 作為對象名的問題
IE:HTML 對象的 ID 可以作為 document 的下屬物件變數名直接使用
FF:不支援
解決方案:使用document.getElementById替代document.all
2. 如果控制項只有name,沒有id, 用getElementById時:
IE:可以找到對象
FF:返回NULL
解決方案:所有控制項必須設定ID屬性
3. Evel:
IE:支援,利用 eval(idName) 可以取得 id 為 idName 的 HTML 對象
FF:不支援。
解決方案:統一使用getElementById(idName) 代替 eval(idName)。
4. Event:
IE:用全域對象window.event
FF:event只能在事件發生的現場使用,在調用函數時傳入event對象
解決方案:使用之前做一下瀏覽器類型判斷,各用各的。
5. 對象名稱中貨幣符號‘$’改為使用底線‘_’
6. 集合類對象問題
IE:可以使用()或[]擷取集合類對象
FF:只能使用[]擷取集合類對象
現有代碼中存在許多,不能在 FF 下運行
解決方案:統一使用[]擷取集合類對象。document.form.item("itemName") 這樣的語句改為document.form.elements["elementName"]
7. 變數名與某 HTML 對象 id 相同的問題
IE:不能使用與 HTML 對象 id 相同的變數名
FF:可以使用
解決方案:在聲明變數時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運行。
此外,最好不要取與 HTML 對象 id 相同的變數名,以減少錯誤。
8. Event定位問題
IE:支援event.x 和event.y
FF:支援event.pageX和event.pageY
解決方案,統一使用event.clientX和event.clientY,但是在FF中event.clientX 與 event.pageX 有微妙的差別(當整個頁面有捲軸的時候),不過大多數時候是等效的。如果要完全一樣,可以判斷瀏覽器類型後對應使用。
9. 父結點的問題
IE:parentElement parentElement.children
FF:parentNode parentNode.childNodes
childNodes的下標的含義在IE和FF中不同,FF使用DOM規範,childNodes中會插入空白文本節點。一般可以通過node.getElementsByTagName()來迴避這個問題。
當html中節點缺失時,IE和FF對parentNode的解釋不同,例如
<form>
<table>
<input/>
</table>
</form>
IE:input.parentNode的值為空白節點
FF:input.parentNode的值為form
FF中節點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)
10. const 問題
現有問題:
IE:不支援 const 關鍵字。如 const constVar = 32; 在IE中這是語法錯誤。
FF:支援
解決方案:不使用 const ,以 var 代替。
11. body 對象
IE:在body標籤完全被讀入之後才存在
FF:在body標籤沒有被瀏覽器完全讀入之前就存在
12. 自訂屬性問題
IE:可以使用擷取常規屬性的方法來擷取自訂屬性,也可以使用getAttribute()擷取自訂屬性
FF:只能使用getAttribute()擷取自訂屬性.
解決方案:統一通過getAttribute()擷取自訂屬性
13. event.srcElement問題
IE:even.srcElement
FF:even.target
解決方案:使用時判斷瀏覽器類型,各用各的。
14. 模態和非模態視窗
IE:支援模態和非模態視窗
FF:不支援
解決方案:直接使用window.open(pageURL,name,parameters)方式開啟新視窗。如果需要將子視窗中的參數傳遞迴父視窗,可以在子視窗中使用window.opener來訪問父視窗。
15. innerText
IE:innerText
FF:textContent
16. 類似 obj.style.height = imgObj.height 的語句
IE:有效
FF:無效
解決方案:統一使用obj.style.height = imgObj.height + 'px';
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/nileel/archive/2009/08/19/4461687.aspx