ie 和firefox中javascript中的異同問題

注意的一些問題:

(一)儘量使用javascript/DOM標準


(二)標準有時也不能跨瀏覽器

1)要面對跨瀏覽器的時候經常會遇到一些ie特有的函數?
可以這樣解決:
做一個判斷把ie和firefox的javascript代碼分開寫

if (typeof window.ActiveXObject != 'undefined') { // 支持IE瀏覽器
//do some thing here
}
else if((typeof document.implementation != 'undefined')&&(typeof document.implementation.createDocument!='undefined')) { // 支持Firefox瀏覽器
//do some thing here
}

2)如果遇到 window.event時在函數中就要特別處理:
e.g.
頁面中:

Java代碼 複製代碼 收藏代碼
  1. < input type="button" value="test" οnclick="javasctipt:testOnclick(event)" >  

javasctipt中的代碼

Java代碼 複製代碼 收藏代碼
  1. function testOnclick(evt){   
  2.     evt = evt ? evt : (window.event ? window.event : null);   
  3. }  
function testOnclick(evt){
	evt = evt ? evt : (window.event ? window.event : null);
}

 

Java代碼 複製代碼 收藏代碼
  1. //獲得點擊對象的id   
  2.             var elem = evt.srcElement ? evt.srcElement : evt.target;//這樣可以事件的元素 相當於document.getelementById("xx")拿元素一樣   
  3.             idOfInputElement=elem.getAttribute("id");//如果有id屬性的話就會拿到屬性的值  
//獲得點擊對象的id
	        var elem = evt.srcElement ? evt.srcElement : evt.target;//這樣可以事件的元素 相當於document.getelementById("xx")拿元素一樣
	        idOfInputElement=elem.getAttribute("id");//如果有id屬性的話就會拿到屬性的值



3)關於Array的indexOf方法問題
Array是object對象,有些瀏覽器不支持idsArray.indexOf(..),這個方法也不是javascript標準,用循環可以拿到最正確的值

4)頁面調用框架中的方法問題
比如有個 A.html,他包含了B.html; B.html有個 test()方法,有個button,按button就觸發test方法
寫法:<input type="button" value="test" οnclick="top.B.test()"/>
如果用<input type="button" value="test" οnclick="test()"/>在firefox上會不起作用

5)window.top.BB.document.getElementById("BFrame") 和window.top.BB.BFrame的不同  BB,BFrame是frame的name的value
window.top.frames["BB"].document.getElementById("BFrame")==window.top.BB.document.getElementById("BFrame")  結果是true,他們是同一對象
window.top.frames["BB"].document.getElementById("BFrame")==window.top.BB.BFrame  結果是 false,說明他們是不同的對象

window.top.BB.BFrame 是object window
window.top.frames["BB"].document.getElementById("BFrame")和window.top.BB.document.getElementById("BFrame")是objectHTMLFrameElement
他們在刪除的時候也不一樣,
object window拿到的是window對象,要刪除兩次纔可以刪掉,有時還會報錯
objectHTMLFrameElement是頁面中的frame元素,刪一次就可以完全刪除了,注意這樣的刪除只是指向了null,而objectHTMLFrameElement元素還是存在的


(三)初始化問題
在使用對象的時候,儘可能在使用前初始化,這樣可以避免一些加載問題

(四)其他問題:
下面的代碼用於屏蔽firefox鼠標右鍵
<script type="text/javascript">
document.οncοntextmenu=function(e){return false;}
</script>

關於禁止選擇:
在IE下,禁止用戶選擇內容,用腳本可以實現:
<script>
document.onselectstart = function(){return false;}
</script>

<body onselectstart="return false">

在firefox,這樣子的寫法沒法實現相同的功能,不過可能用css實現:
在頁面加上
<style>
html *{-moz-user-select: none;}
</style>

例子:
<style>
html *{-moz-user-select: none;}
</style>
<body>
試試看能否選擇這些文字?
</body>


把  document.all["XX"] 改爲 document.getElementById("XX");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章