熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

JS的IE和Firefox兼容性匯編

2013-11-15 11:43:40  來源: JSP教程 

  以下以 IE 代替 Internet Explorer以 MF 代替 Mozzila Firefox
em 問題
    ()現有問題
        現有代碼中存在許多 dem(itemName) 這樣的語句不能在 MF 下運行
    ()解決方法
        改用 documentformNameelements[elementName]
    ()其它
        參見

   集合類對象問題
    ()現有問題
        現有代碼中許多集合類對象取用時使用 ()IE 能接受MF 不能
    ()解決方法
        改用 [] 作為下標運算documentforms(formName) 改為 documentforms[formName]
        又如documentgetElementsByName(inputName)() 改為 documentgetElementsByName(inputName)[]
    ()其它

   windowevent
    ()現有問題
        使用 windowevent 無法在 MF 上運行
    ()解決方法
        MF 的 event 只能在事件發生的現場使用此問題暫無法解決可以這樣變通
        原代碼(可在IE中運行)
            <input type=button name=someButton value=提交 onclick=javascript:gotoSubmit()/>
           
            <script language=javascript>
                function gotoSubmit() {
                   
                    alert(windowevent);    // use windowevent
                   
                }
            </script>
        新代碼(可在IE和MF中運行)
            <input type=button name=someButton value=提交 onclick=javascript:gotoSubmit(event)/>
           
            <script language=javascript>
                function gotoSubmit(evt) {
                    evt = evt ? evt : (windowevent ? windowevent : null);
                   
                    alert(evt);             // use evt
                   
                }
            </script>
        此外如果新代碼中第一行不改與老代碼一樣的話(即 gotoSubmit 調用沒有給參數)則仍然只能在IE中運行但不會出錯所以這種方案 tpl 部分仍與老代碼兼容

   HTML 對象的 id 作為對象名的問題
    ()現有問題
        在 IE 中HTML 對象的 ID 可以作為 document 的下屬對象變量名直接使用在 MF 中不能
    ()解決方法
        用 getElementById(idName) 代替 idName 作為對象變量使用

   用idName字符串取得對象的問題
    ()現有問題
        在IE中利用 eval(idName) 可以取得 id 為 idName 的 HTML 對象在MF 中不能
    ()解決方法
        用 getElementById(idName) 代替 eval(idName)

   變量名與某 HTML 對象 id 相同的問題
    ()現有問題
        在 MF 中因為對象 id 不作為 HTML 對象的名稱所以可以使用與 HTML 對象 id 相同的變量名IE 中不能
    ()解決方法
        在聲明變量時一律加上 var 以避免歧義這樣在 IE 中亦可正常運行
        此外最好不要取與 HTML 對象 id 相同的變量名以減少錯誤
    ()其它
        參見 問題

   eventx 與 eventy 問題
    ()現有問題
        在IE 中event 對象有 x y 屬性MF中沒有
    ()解決方法
        在MF中與eventx 等效的是 eventpageX但eventpageX IE中沒有
        故采用 eventclientX 代替 eventx在IE 中也有這個變量
        eventclientX 與 eventpageX 有微妙的差別(當整個頁面有滾動條的時候)不過大多數時候是等效的

  如果要完全一樣可以稍麻煩些
        mX = eventx ? eventx : eventpageX;
        然後用 mX 代替 eventx
    ()其它
        eventlayerX 在 IE 與 MF 中都有具體意義有無差別尚未試驗

   關於frame
   ()現有問題
         在 IE中 可以用windowtestFrame取得該framemf中不行
   ()解決方法
         在frame的使用方面mf和ie的最主要的區別是
如果在frame標簽中書寫了以下屬性
<frame src= id=frameId name=frameName />
那麼ie可以通過id或者name訪問這個frame對應的window對象
而mf只可以通過name來訪問這個frame對應的window對象
例如如果上述frame標簽寫在最上層的window裡面的htm裡面那麼可以這樣訪問
ie windowtopframeId或者windowtopframeName來訪問這個window對象
mf 只能這樣windowtopframeName來訪問這個window對象

  另外在mf和ie中都可以使用windowtopdocumentgetElementById(frameId)來訪問frame標簽
並且可以通過windowtopdocumentgetElementById(testFrame)src = 來切換frame的內容
也都可以通過windowtopframeNamelocation = 來切換frame的內容
關於frame和window的描述可以參見bbs的window與frame文章
以及/test/js/test_frame/目錄下面的測試
adun 修改

   在mf中自己定義的屬性必須getAttribute()取得
在mf中沒有  parentElement parementchildren  而用
               parentNode parentNodechildNodes
   childNodes的下標的含義在IE和MF中不同MF使用DOM規范childNodes中會插入空白文本節點
  一般可以通過nodegetElementsByTagName()來回避這個問題
   當html中節點缺失時IE和MF對parentNode的解釋不同例如
   <form>
   <table>
        <input/>
   </table>
   </form>
   MF中inputparentNode的值為form 而IE中inputparentNode的值為空節點

  MF中節點沒有removeNode方法必須使用如下方法 nodeparentNoderemoveChild(node)

  nst 問題
  ()現有問題:
     在 IE 中不能使用 const 關鍵字如 const constVar = ; 在IE中這是語法錯誤
  ()解決方法:
     不使用 const 以 var 代替

   body 對象
   MF的body在body標簽沒有被浏覽器完全讀入之前就存在而IE則必須在body完全被讀入之後才存在

   url encoding
在js中如果書寫url就直接寫&不要寫&amp;例如var url = xxjsp?objectName=xx&amp;objectEvent=xxx;
frmaction = url那麼很有可能url不會被正常顯示以至於參數沒有正確的傳到服務器
一般會服務器報錯參數沒有找到
當然如果是在tpl中例外因為tpl中符合xml規范要求&書寫為&amp;
一般MF無法識別js中的&amp;

   nodeName 和 tagName 問題
  ()現有問題
     在MF中所有節點均有 nodeName 值但 textNode 沒有 tagName 值在 IE 中nodeName 的使用好象
     有問題(具體情況沒有測試但我的IE已經死了好幾次)
  ()解決方法
     使用 tagName但應檢測其是否為空

   元素屬性
   IE下 inputtype屬性為只讀但是MF下可以修改

   documentgetElementsByName() 和 documentall[name] 的問題
  ()現有問題
     在 IE 中getElementsByName()documentall[name] 均不能用來取得 div 元素(是否還有其它不能取的元素還不知道)

  PS原作者是誰我已經無從考證原來貼的那篇是朋友轉的但是內容缺失一部分我又上網找到這個相對來說比較完整的版本


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19508.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.