狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

在開發過程中如何解決JavaScript兼容性問題的?

admin
2013年6月10日 17:24 本文熱度 5284

1.window.event問題
說明:window.event只能在IE下運行,而不能在Firefox下運行,這是因為Firefox的event只能在事件發生的現場使用.
解決方法: 在觸發事件的函數上使用(aEvent)參數,例如下面的


  1. objNode.onmouseover=function(aEvent){   
  2. var myEvent = window.event ? window.event.srcElement : aEvent.target;   
  3. //執行其他動作   
  4. }


(每次用事件之前Firefox都需要用getEvent()獲取一下,否則就是空)

2.event.x與event.y問題
說明:IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性;Firefox下,even對象有pageX,pageY屬性,但是沒有x,y屬性.
解決方法:使用mX(mX = event.x ? event.x : event.pageX;)來代替IE下的event.x或者Firefox下的event.pageX.

3.event.srcElement問題
說明:IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有srcElement屬性.
解決方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)來代替IE下的event.srcElement或者Firefox下的event.target.

4.window.location.href問題
說明:IE或者Firefox2.0.x下,可以使用window.locationwindow.location.href;Firefox1.5.x下,只能使用window.location.
解決方法:使用window.location來代替window.location.href.


5.模態和非模態窗口問題
說明:IE下,可以通過showModalDialogshowModelessDialog打開模態和非模態窗口;Firefox下則不能.
解決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口。

如果需要將子窗口中的參數傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口. 例如:


 
  1. var parWin = window.opener;  
  2. parWin.document.getElementById("itemID").value = "some value";  


6.frame問題
以下面的frame為例:<frame src="xxx.html" id="frameId" name="frameName" />

(1)訪問frame對象:
IE:使用window.frameId或者window.frameName來訪問這個frame對象.
Firefox:只能使用window.frameName來訪問這個frame對象.
另外,在IE和Firefox中都可以使用window.document.getElementById("frameId")來訪問這個frame對象.

(2)切換frame內容:
在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"來切換frame的內容.

如果需要將frame中的參數傳回父窗口,可以在frame中使用parent來訪問父窗口。例如:parent.document.form1.filename.value="some value";


7.body問題
Firefox的body在body標簽沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標簽被瀏覽器完全讀入之后才存在.

例如:
Firefox:
程序代碼


 
  1. <body>    
  2. <script type="text/javascript">    
  3. document.body.onclick = function(evt){    
  4. evtevt = evt || window.event;    
  5. alert(evt);    
  6. }    
  7. </script>  


</body>

IE&Firefox:
程序代碼


  1. <body>   
  2. </body>    
  3. <script type="text/javascript">    
  4. document.body.onclick = function(evt){    
  5. evtevt = evt || window.event;    
  6. alert(evt);    
  7. }    
  8. </script>  


8.nodeName 和 tagName 問題
問題:在MF,IE中,所有節點均有 nodeName 值,但 textNode 沒有 tagName 值。
解決方法:使用 tagName,但應檢測其是否為undefined。

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


10.children 與 childNodes,removeNode
問題一:在MF中沒有 parentElement parement.children 而用 parentNode parentNode.childNodes


問題二:childNodes的下標的含義在IE和MF中不同,MF使用DOM規范,childNodes中會插入空白文本節點。


問題三:一般可以通過node.getElementsByTagName()來回避這個問題。當html中節點缺失時,IE和MF對parentNode的解釋不同,例如
<form>
<table>


 
  1. <input/>  


</table>
</form>
MF中input.parentNode的值為form, 而IE中input.parentNode的值為空節點


問題四:MF中節點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)

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

12.在ff中沒有 parentElement parement.children 而用 parentNode parentNode.childNodes
childNodes的下標的含義在IE和ff中不同,ff使用DOM規范,childNodes中會插入空白文本節點。
一般可以通過node.getElementsByTagName()來回避這個問題。
當html中節點缺失時,IE和ff對parentNode的解釋不同,例如


  1. <form>    
  2. <table>    
  3. <input/>    
  4. </table>    
  5. </form>


ff中input.parentNode的值為form, 而IE中input.parentNode的值為空節點
ff中節點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)

13.DOM 數據島的問題
(1)現有問題
在IE中, <xml>標簽具有特殊意義, 可以內含XML DOM, 并能實現與HTML組件的數據 綁定. 在MF中,<xml>則僅僅是一個未知的標記而已. 另外, 對 IE 來說, <xml>實際意味著這里是一個ActiveX對象, 但它卻掛在HTML本 身的DOM樹下作為一個節點, 因而會對DOM樹的遍歷造成嚴重影響.

(2)解決方法
IE的數據綁定機制是可以用JS來模擬的, 但是太麻煩, 建議不使用數據綁定機制或者 尋找實現這種模擬的庫來做. 我們只討論如何實現DOM的兼容. 在MF中無論已知的HTML標記還是其它符合XML規范的標記, 都是用統一的DOM樹來處理的, 因此, MF事實上完全可以使用DOM數據島, 但與IE小小的不同在于: 在IE中<xml> 是個 DOM document, 而在MF只是 DOM node. 這個差別通常不足為患. 但是有一個小小的細節, 為了兼容HTML相當隨意的語法, MF無法識別簡寫的空標記. 如: <xml id="xx"><book><title>xxxx</title><content/><index/></book></xml>, 這其中<content/>和<index/>是簡寫形式的, 會使MF無法識別, 應當寫成: <content></content><index></index> 不過, 我懷疑如果用XHTML, 可能就沒有這種問題. 但我還沒有試過. 對于IE中<xml>干擾HTML的DOM結構問題, 我現在的方法是處理完畢后把它從HTML的 DOM中刪除. 不知道還有沒有更好的解.

14.firefox與IE(parentElement)的父元素的區別
IE:obj.parentElement
firefox:obj.parentNode
解決方法: 因為firefox與IE都支持DOM,因此使用obj.parentNode是不錯選擇.

15.FireFox中類似 obj.style.height = imgObj.height 的語句無效
解決方法:obj.style.height = imgObj.height + 'px';

16. ie,firefox以及其它瀏覽器對于 table 標簽的操作都各不相同
在ie中不允許對table和tr的innerHTML賦值,使用js增加一個tr時,使用appendChile方法也不管用。
解決方法:
//向table追加一個空行:
var row = otable.insertRow(-1);
var cell = document.createElement("td");
cell.innerHTML = " ";
cell.className = "XXXX";
row.appendChild(cell);

17ie支持document.all 而firefox 不支持
改用下面三個tag的其中一個來代替document.all
getElementsByTagName("tagName") 可以得到得到所有標簽元素的集合
getElementById("idName") 可以按id得到某一元素
getElementsByName("Name") 可以得到按name屬性得到某一元素

18.firefox 中使用innerHTML 的方法
document.all.online.innerHTML; //這種方法在IE中可以使用,但不是標準方法
document.getElementById("online").innerHTML; //這樣firefox就能使用innerHTML了

19.對事件處理函數的重寫
解決:(例):如對document的onclick()重寫,統一使用document.onclick = function(){…}

20.屏蔽Form提交事件
event.returnValue=false;// for IE
evt.preventDefault();//for firefox

21.獲取事件源
var source=event.srcElement //IE
var source=event.target //firefox

22.添加事件兼容寫法
function addEvent(oElement,sEvent,func){
if (oElement.attachEvent){
oElement.attachEvent(sEvent,func);
}
else{
sEventsEvent=sEvent.substring(2,sEvent.length);
oElement.addEventListener(sEvent,func,false);
}
}
解決方法:addEvent(window,"onload",Start);

23.長度:FireFox長度必須加“px”,IE無所謂


24.XmlHttp
在IE中,XmlHttp.send(content)方法的content可以為空,而firefox則不能為空,應該用send(" "),否則會出現錯誤

25.事件追加方法 attachEvent(IE)/detachEvent;addEventListener( Mozilla, Netscape, Firefox)/removeEventListener
又或者直接用obj.onmouseover=func;

26.Firefox中不存在 Event時間,必須通過object本身去取
在Firefox獲取當前物件的坐標方法:


  1. document.onmousemove = Inti_move;   
  2. function  Inti_move(ert)   
  3. {   
  4. x=ert.pageX;   
  5. }


27.


  1. function getChild(o) {   
  2. var allChild = o.childNodes;   
  3. var tmpArray = new Array();   
  4. for (var i=0;i<allChild.length;i++) {   
  5. if (allChild[i].nodeType == 1) {   
  6. tmpArray.push(i);   
  7. }   
  8. }   
  9. var o = tmpArray;   
  10. return o;   
  11. }


如果某個元素的子節點是元素的話就保留push到一個新數組里
這樣子FF可以兼容了


該文章在 2013/6/10 17:24:42 編輯過

全部評論2

admin
2013年6月10日 17:25

1.document.formName.item("itemName") 問題

說明:IE下,可以使用document.formName.item("itemName")或document.formName.elements["elementName"];Firefox下,只能使用document.formName.elements["elementName"].
解決方法:統一使用document.formName.elements["elementName"].


2.集合類對象問題

說明:IE下,可以使用()或[]獲取集合類對象;Firefox下,只能使用[]獲取集合類對象.
解決方法:統一使用[]獲取集合類對象.
例如:document.getElementsByName("inputName")[0]、document.forms["formName"]


3.自定義屬性問題

說明:IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;Firefox下,只能使用getAttribute()獲取自定義屬性.
解決方法:統一通過getAttribute()獲取自定義屬性.


4.eval("idName")問題

說明:IE下,可以使用eval("idName")或getElementById("idName")來取得id為idName的HTML對象;Firefox下只能使用getElementById("idName")來取得id為idName的HTML對象.
解決方法:統一用getElementById("idName")來取得id為idName的HTML對象.
例如:document.getElementById("itemId")


5.變量名與某HTML對象ID相同的問題

說明:IE下,HTML對象的ID可以作為document的下屬對象變量名直接使用;Firefox下則不能.Firefox下,可以使用與HTML對象ID相同的變量名;IE下則不能。
解決方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML對象ID相同的變量名,以減少錯誤;在聲明變量時,一律加上var,以避免歧義.


該評論在 2013/6/10 17:25:41 編輯過
admin
2013年6月10日 17:26

1 盡量不使用某些瀏覽器獨有的方法或屬性,比如 document.all

2 還有些情況是瀏覽器使用的javascript引擎不同,可能導致相同的方法或程序但是效果不同,這就得對個別瀏覽器特殊照顧了。

3 盡量使用一些js框架,拿jquery來說,本身就兼容了不少主流瀏覽器,這樣就能避免一些我們在使用時出現一些兼容問題。

4 多了解出現兼容性問題的函數、方法、屬性等,在使用時多加注意,這方面完全是經驗,只有自己真正遇到過的,記憶才會深刻,最好有些悲慘的教訓,呵呵。還有就是多了解,盡量多記一些。


該評論在 2013/6/10 17:26:35 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved