<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Javascript的IE和Firefox兼容性匯編[轉(zhuǎn)]

    JavascriptIEFirefox兼容性匯編
    以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox
    1. document.form.item
    問題
    (1)
    現(xiàn)有問題:
    現(xiàn)有代碼中存在許多 document.formName.item("itemName") 這樣的語句,不能在 MF 下運行
    (2)
    解決方法:
    改用 document.formName.elements["elementName"]
    (3)
    其它
    參見 2
    2.
    集合類對象問題
    (1)
    現(xiàn)有問題:
    現(xiàn)有代碼中許多集合類對象取用時使用 ()IE 能接受,MF 不能。
    (2)
    解決方法:
    改用 [] 作為下標(biāo)運算。如:document.forms("formName") 改為 document.forms["formName"]。
    又如:document.getElementsByName("inputName")(1) 改為 document.getElementsByName("inputName")[1]
    (3)
    其它
    3. window.event
    (1)
    現(xiàn)有問題:
    使用 window.event 無法在 MF 上運行
    (2)
    解決方法:
    MF
    event 只能在事件發(fā)生的現(xiàn)場使用,此問題暫無法解決??梢赃@樣變通:
    原代碼(可在IE中運行)
    <input type="button" name="someButton" value="
    提交" onclick="javascript:gotoSubmit()"/>
    ...
    <script language="javascript">
    function gotoSubmit() {
    ...
    alert(window.event); // use window.event
    ...
    }
    </script>
    新代碼(可在IEMF中運行)
    <input type="button" name="someButton" value="
    提交" onclick="javascript:gotoSubmit(event)"/>
    ...
    <script language="javascript">
    function gotoSubmit(evt) {
    evt = evt ? evt : (window.event ? window.event : null);
    ...
    alert(evt); // use evt
    ...
    }
    </script>
    此外,如果新代碼中第一行不改,與老代碼一樣的話( gotoSubmit 調(diào)用沒有給參數(shù)),則仍然只能在IE中運行,但不會出錯。所以,這種方案 tpl 部分仍與老代碼兼容。
    4. HTML
    對象的 id 作為對象名的問題
    (1)
    現(xiàn)有問題
    IE 中,HTML 對象的 ID 可以作為 document 的下屬對象變量名直接使用。在 MF 中不能。
    (2)
    解決方法
    getElementById("idName") 代替 idName 作為對象變量使用。
    5.
    idName字符串取得對象的問題
    (1)
    現(xiàn)有問題
    IE中,利用 eval(idName) 可以取得 id idName HTML 對象,在MF 中不能。
    (2)
    解決方法
    getElementById(idName) 代替 eval(idName)。
    6.
    變量名與某 HTML 對象 id 相同的問題
    (1)
    現(xiàn)有問題
    MF 中,因為對象 id 不作為 HTML 對象的名稱,所以可以使用與 HTML 對象 id 相同的變量名,IE 中不能。
    (2)
    解決方法
    在聲明變量時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運行。
    此外,最好不要取與 HTML 對象 id 相同的變量名,以減少錯誤。
    (3)
    其它
    參見 問題4
    7. event.x
    event.y 問題
    (1)
    現(xiàn)有問題
    IE 中,event 對象有 x, y 屬性,MF中沒有。
    (2)
    解決方法
    MF中,與event.x 等效的是 event.pageX。但event.pageX IE中沒有。
    故采用 event.clientX 代替 event.x。在IE 中也有這個變量。
    event.clientX
    event.pageX 有微妙的差別(當(dāng)整個頁面有滾動條的時候),不過大多數(shù)時候是等效的。
    如果要完全一樣,可以稍麻煩些:
    mX = event.x ? event.x : event.pageX;
    然后用 mX 代替 event.x
    (3)
    其它
    event.layerX
    IE MF 中都有,具體意義有無差別尚未試驗。

    8.
    關(guān)于frame
    (1)
    現(xiàn)有問題
    IE 可以用window.testFrame取得該frame,mf中不行
    (2)
    解決方法
    frame的使用方面mfie的最主要的區(qū)別是:
    如果在frame標(biāo)簽中書寫了以下屬性:
    <frame src="xx.htm" id="frameId" name="frameName" />
    那么ie可以通過id或者name訪問這個frame對應(yīng)的window對象
    mf只可以通過name來訪問這個frame對應(yīng)的window對象
    例如如果上述frame標(biāo)簽寫在最上層的window里面的htm里面,那么可以這樣訪問
    ie
    window.top.frameId或者window.top.frameName來訪問這個window對象
    mf
    只能這樣window.top.frameName來訪問這個window對象
    另外,在mfie中都可以使用window.top.document.getElementById("frameId")來訪問frame標(biāo)簽
    并且可以通過window.top.document.getElementById("testFrame").src = 'xx.htm'來切換frame的內(nèi)容
    也都可以通過window.top.frameName.location = 'xx.htm'來切換frame的內(nèi)容
    關(guān)于framewindow的描述可以參見bbs的‘windowframe’文章
    以及/test/js/test_frame/目錄下面的測試
    ----adun 2004.12.09
    修改
    9.
    mf中,自己定義的屬性必須getAttribute()取得
    10.
    mf中沒有 parentElement parement.children 而用
    parentNode parentNode.childNodes
    childNodes
    的下標(biāo)的含義在IEMF中不同,MF使用DOM規(guī)范,childNodes中會插入空白文本節(jié)點。
    一般可以通過node.getElementsByTagName()來回避這個問題。
    當(dāng)html中節(jié)點缺失時,IEMFparentNode的解釋不同,例如
    <form>
    <table>
    <input/>
    </table>
    </form>
    MF
    input.parentNode的值為form, IEinput.parentNode的值為空節(jié)點
    MF
    中節(jié)點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)
    11.const
    問題
    (1)
    現(xiàn)有問題:
    IE 中不能使用 const 關(guān)鍵字。如 const constVar = 32; IE中這是語法錯誤。
    (2)
    解決方法:
    不使用 const ,以 var 代替。
    12. body
    對象
    MF
    bodybody標(biāo)簽沒有被瀏覽器完全讀入之前就存在,而IE則必須在body完全被讀入之后才存在
    13. url encoding
    js中如果書寫url就直接寫&不要寫&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
    frm.action = url
    那么很有可能url不會被正常顯示以至于參數(shù)沒有正確的傳到服務(wù)器
    一般會服務(wù)器報錯參數(shù)沒有找到
    當(dāng)然如果是在tpl中例外,因為tpl中符合xml規(guī)范,要求&書寫為&
    一般MF無法識別js中的&

    14. nodeName
    tagName 問題
    (1)
    現(xiàn)有問題:
    MF中,所有節(jié)點均有 nodeName 值,但 textNode 沒有 tagName 值。在 IE 中,nodeName 的使用好象
    有問題(具體情況沒有測試,但我的IE已經(jīng)死了好幾次)。
    (2)
    解決方法:
    使用 tagName,但應(yīng)檢測其是否為空。
    15.
    元素屬性
    IE
    input.type屬性為只讀,但是MF下可以修改

    16. document.getElementsByName()
    document.all[name] 的問題
    (1)
    現(xiàn)有問題:
    IE 中,getElementsByName()、document.all[name] 均不能用來取得 div 元素(是否還有其它不能取的元素還不知道)。

    1. 對象問題
    1.1 Form
    對象
    現(xiàn)有問題:
    現(xiàn)有代碼這獲得form對象通過document.forms("formName"),這樣使用在IE 能接受,MF 不能。
    解決方法:
    改用 作為下標(biāo)運算。改為document.forms["formName"]
    備注
    上述的改用 作為下標(biāo)運算中的formNameidname

    1.2 HTML
    對象
    現(xiàn)有問題:
    IE 中,HTML 對象的 ID 可以作為 document 的下屬對象變量名直接使用。在 MF 中不能。
    document.all("itemName")
    或者document.all("itemId")
    解決方法:
    使用對象ID作為對象變量名
    document.getElementById("itemId")
    備注
    document.all
    IE自定義的方法,所以請大家盡量不使用。
    還有一種方式,在IEMF都可以使用
    var f = document.forms["formName "];
    var o = f. itemId;

    1.3 DIV
    對象
    現(xiàn)有問題:
    IE 中,DIV對象可以使用ID作為對象變量名直接使用。在 MF 中不能。
    DivId.style.display = "none"
    解決方法:
    document.getElementById("DivId").style.display = "none"
    備注
    獲得對象的方法不管是不是DIV對象,都使用getElementById方法。參見1.2


    1.4
    關(guān)于frame
    現(xiàn)有問題
    IE 可以用window.testFrame取得該frame,mf中不行
    解決方法
    frame的使用方面MFIE的最主要的區(qū)別是:
    如果在frame標(biāo)簽中書寫了以下屬性:

    那么IE可以通過id或者name訪問這個frame對應(yīng)的window對象
    mf只可以通過name來訪問這個frame對應(yīng)的window對象
    例如如果上述frame標(biāo)簽寫在最上層的window里面的htm里面,那么可以這樣訪問
    IE
    window.top.frameId或者window.top.frameName來訪問這個window對象
    MF
    :只能這樣window.top.frameName來訪問這個window對象
    另外,在mfie中都可以使用window.top.document.getElementById("frameId")來訪問frame標(biāo)簽
    并且可以通過window.top.document.getElementById("testFrame").src = 'xx.htm'來切換frame的內(nèi)容
    也都可以通過window.top.frameName.location = 'xx.htm'來切換frame的內(nèi)容

    1.5
    窗口
    現(xiàn)有問題
    IE
    中可以通過showModalDialogshowModelessDialog打開模態(tài)和非模態(tài)窗口,但是MF不支持。
    解決辦法
    直接使用window.open(pageURL,name,parameters)方式打開新窗口。
    如果需要傳遞參數(shù),可以使用frame或者iframe

    2.
    總結(jié)
    2.1
    JS中定義各種對象變量名時,盡量使用id,避免使用name
    IE 中,HTML 對象的 ID 可以作為 document 的下屬對象變量名直接使用。在 MF 中不能,所以在平常使用時請盡量使用id,避免只使用name,而不使用id。

    2.2
    變量名與某 HTML 對象 id 相同的問題
    現(xiàn)有問題
    MF 中,因為對象 id 不作為 HTML 對象的名稱,所以可以使用與 HTML 對象 id 相同的變量名,IE 中不能。
    解決方法
    在聲明變量時,一律加上 var ,以避免歧義,這樣在 IE 中亦可正常運行。
    此外,最好不要取與 HTML 對象 id 相同的變量名,以減少錯誤。
    posted on 2006-03-03 09:47 隨風(fēng)逝 閱讀(656) 評論(2)  編輯  收藏 所屬分類: javascript

    評論

    # re: Javascript的IE和Firefox兼容性匯編[轉(zhuǎn)] 2006-03-03 10:58 隨風(fēng)逝  回復(fù)  更多評論   

    ff和ie還是很有區(qū)別滴。以后做東javascript要注意規(guī)范了啊,不然……

    # re: Javascript的IE和Firefox兼容性匯編[轉(zhuǎn)] 2006-08-23 16:44 q  回復(fù)  更多評論   

    說的很好!
    請教一個有關(guān)firefox傳遞event的問題,可否舉個例子?我用event.clientX老報錯呀!說event has no property,怎么回事?

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产激情在线一区| 亚洲av日韩综合一区在线观看| 亚洲精品视频免费观看| 亚洲av无码专区在线电影天堂| 亚洲国产日产无码精品| 亚洲av永久无码天堂网| 一区二区视频在线免费观看| 瑟瑟网站免费网站入口| 两个人看的www免费| 免费专区丝袜脚调教视频| 最近中文字幕无吗免费高清| 亚洲?v无码国产在丝袜线观看| 国产99视频精品免费视频7| 妞干网在线免费视频| 最近中文字幕无吗免费高清| 亚洲国产高清精品线久久| 亚洲国产黄在线观看| 亚洲一级二级三级不卡| 亚洲高清毛片一区二区| 西西人体免费视频| 波多野结衣中文字幕免费视频| 91情侣在线精品国产免费| 午夜男人一级毛片免费 | 成人免费的性色视频| 国产最新凸凹视频免费| 国产精品嫩草影院免费| 亚洲va无码手机在线电影| 亚洲国产美女福利直播秀一区二区| 亚洲国产日韩在线| 国产精品美女免费视频观看| 免费在线观看视频网站| 亚洲一级片免费看| 久久久综合亚洲色一区二区三区| 在线观看亚洲AV日韩AV| 黄页视频在线观看免费| 0588影视手机免费看片| 中文字幕亚洲一区二区三区| 亚洲精品天堂在线观看| 国产亚洲精品欧洲在线观看| 国产美女视频免费观看的网站 | a级毛片在线免费看|