天天看點

浏覽器相容筆記

document的compatMode訓示目前文檔的盒子模型。有兩個值:“BackCompat”和“CSS1Compat”。當文檔中用 DOCTYPE明确聲明了目前文檔是XHTML格式時,這個屬性将是“CSS1Compat”。否則,是“BackCompat”。

    compatMode影響CSS盒子的呈現形式,對在精确的UI定位中需要特别注意。“CSS1Compat”是按符合W3C标準的盒子模型來呈現的。

IE的特殊性

    IE的DOM元素屬性與Firefox, Opera, Safari有些不同。在IE中,我們可以給DOM添加任意自定義的屬性,但卻不能用delete操作符删除這個添加的屬性,要删除自定義屬性必須用DOM元素的removeAttribute方法。

    IE中DOM對象的屬性與其标簽中的屬性是相同的。是以,dom.setAttribute("myattr", "yeah") 與 dom.myattr = "yeah" 是完全等效的,也可以這樣<... myattr="yeah" ...>直接在标簽中寫自定屬性。

    而Firefox, Opera, Safari中DOM元素的屬性與标簽特性(Attribute)是兩個不同的概念,二者并無直接聯系。

Opera的特殊性:

     Opera 9.5 及之前版本的function沒有caller屬性,而IE, Firefox, Safari一直都有。

     Opera 9.6及之後的版本中,function已經支援caller屬性!

     在對待eval()和window.eval()的問題上,Opera與其他三種浏覽器有差別。

     IE, Firefox, Safari似乎并不刻意區分eval()和window.eval()兩種寫法,他們都是在目前作用域内解析代碼的,執行效果一樣。

     而Opera中的eval()和window.eval()是有差別的。使用eval()時,是在目前作用域裡解釋代碼的;而使用window.eval()時,是在根作用域裡解釋代碼的。

outerHTML

    Firefox的DOM元素沒有outerHTML屬性,而IE, Opera和Safari都有這一屬性。

innerText

    IE, Opera和Safari都支援DOM元素的innerText屬性,而Firefox不支援着一屬性。Firefox中有textContent屬性,與其他浏覽器的innerText屬性類似。

textContent

    Firefox, Opera和Safari都支援DOM元素的textContent屬性,而IE沒有這一屬性。在IE中是用innerText屬性來操作。Opera和Safari兩邊倒,既支援innerText也支援textContent。

onmouseleave

    onmouseleave事件隻有IE的DOM元素才有。

    而onmouseout事件是IE, Firefox, Opera 和 Safari 都有的,是以請使用onmouseout事件,而不要用onmouseleave事件。

constructor

    IE的DOM元素沒有constructor屬性,而Firefox, Chorme, Opera, Safari都有constructor屬性。

    對于Firefox的DOM元素,其constructor屬性是一個内置對象,其typeof值是'object'。

    對于Chrome的DOM元素,其constructor屬性是一個内置函數,其typeof值是'function'。

    對于Opera的DOM元素,其constructor屬性是Object()函數,其typeof值是'function'。

    對于Safari的DOM元素,其constructor屬性是一個内置對象,其typeof值是'object'。

    值得注意的是,盡管Chrome和Safari都采用了Webkit核心,但其DOM元素的結構還是有些不同的。

繼續閱讀