Javascript的IE和Firefox兼容性匯編

?

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

?

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

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

?

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

?

event.x 與 event.y 問題
現有問題:
在IE 中,event 對象有 x, y 屬性,FF中沒有。
解決方法:
在FF中,與event.x 等效的是 event.pageX。但event.pageX IE中沒有。
故采用 event.clientX 代替 event.x。在IE 中也有這個變量。
event.clientX 與 event.pageX 有微妙的差別(當整個頁面有滾動條的時候),不過大多數時候是等效的。
如果要完全一樣,可以稍麻煩些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
其它:
event.layerX 在 IE 與 FF 中都有,具體意義有無差別尚未試驗。

?

關于frame
現有問題:
在 IE中 可以用window.testFrame取得該frame,FF中不行
解決方法:
在frame的使用方面FF和ie的最主要的區別是:
如果在frame標簽中書寫了以下屬性:
<frame src="/xx.htm" id="frameId" name="frameName" />
那么ie可以通過id或者name訪問這個frame對應的window對象
而FF只可以通過name來訪問這個frame對應的window對象
例如如果上述frame標簽寫在最上層的window里面的htm里面,那么可以這樣訪問
IE: window.top.frameId或者window.top.frameName來訪問這個window對象
FF: 只能這樣window.top.frameName來訪問這個window對象
另外,在FF和ie中都可以使用window.top.document.getElementById("frameId")來訪問frame標簽
并且可以通過window.top.document.getElementById("testFrame").src = 'xx.htm'來切換frame的內容
也都可以通過window.top.frameName.location = 'xx.htm'來切換frame的內容

?

父結點的問題
在FF中沒有 parentElement parentElement.children? 而用 parentNode parentNode.childNodes
childNodes的下標的含義在IE和FF中不同,FF使用DOM規范,childNodes中會插入空白文本節點。
一般可以通過node.getElementsByTagName()來回避這個問題。當html中節點缺失時,IE和FF對parentNode的解釋不同,例如
<form>
<table>
? <input/>
</table>
</form>
FF中input.parentNode的值為form, 而IE中input.parentNode的值為空節點
FF中節點沒有removeNode方法,必須使用如下方法 node.parentNode.removeChild(node)

?

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

body 對象
FF的body在body標簽沒有被瀏覽器完全讀入之前就存在,而IE則必須在body完全被讀入之后才存在

?

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

?

nodeName 和 tagName 問題
現有問題:
在FF中,所有節點均有 nodeName 值,但 textNode 沒有 tagName 值。在 IE 中,nodeName 的使用好象有問題
解決方法:
使用 tagName,但應檢測其是否為空。

?

元素屬性
IE下 input.type屬性為只讀,但是FF下可以修改
document.getElementsByName() 和 document.all[name] 的問題
在 IE 中,getElementsByName()、document.all[name] 均不能用來取得多個具有相同name的div 元素集合。

?

兼容firefox的 outerHTML,FF中沒有outerHtml的方法

if (window.HTMLElement) {
? HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML) {
??????? var r=this.ownerDocument.createRange();
??????? r.setStartBefore(this);
??????? var df=r.createContextualFragment(sHTML);
??????? this.parentNode.replaceChild(df,this);
??????? return sHTML;
??? });

??? HTMLElement.prototype.__defineGetter__("outerHTML",function() {
??????? var attr;
??????? var attrs=this.attributes;
??????? var str="<"+this.tagName.toLowerCase();
??????? for (var i=0;i<attrs.length;i++) {
??????????? attr=attrs[i];
??????????? if(attr.specified)
??????????????? str+=" "+attr.name+'="'+attr.value+'"';
??????? }

??????? if(!this.canHaveChildren)
??????????? return str+">";
??????? return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
??????? });

?? HTMLElement.prototype.__defineGetter__("canHaveChildren",function() {
???? switch(this.tagName.toLowerCase()) {
???????? case "area":
???????? case "base":
???????? case "basefont":
???????? case "col":
???????? case "frame":
???????? case "hr":
???????? case "img":
???????? case "br":
???????? case "input":
???????? case "isindex":
???????? case "link":
???????? case "meta":
???????? case "param":
???????? return false;
???? }
???? return true;
?? });
}


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

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


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


模態和非模態窗口問題
說明:IE下,可以通過showModalDialog和showModelessDialog打開模態和非模態窗口;Firefox下則不能.
解決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口
如果需要將子窗口中的參數傳遞回父窗口,可以在子窗口中使用window.opener來訪問父窗口. 例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";

?

事件委托方法
IE:document.body.onload = inject; //Function inject()在這之前已被實現
FF:document.body.onload = inject();
如果要加傳遞參數,可以做個閉包
(function(arg){

?? document.body.οnlοad=function(){inject(arg);};

})(arg)

innerText在IE中能正常工作,但是innerText在FireFox中卻不行.
解決方法:
if(navigator.appName.indexOf("Explorer") > -1){
??? document.getElementById('element').innerText = "my text";
} else{
??? document.getElementById('element').textContent = "my text";
}


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


IE,FF以及其它瀏覽器對于 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);


樣式部分
-----------------------------------------------------------------------------------------------------------
cursor:hand VS cursor:pointer
FF不支持hand,但ie支持pointer
解決方法: 統一使用pointer

padding 問題
padding 5px 4px 3px 1px FireFox無法解釋簡寫,
必須改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;

消除ulol等列表的縮進時
樣式應寫成:list-style:none;margin:0px;padding:0px;
其中margin屬性對IE有效,padding屬性對FireFox有效

CSS透明
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)
FF:opacity:0.6

CSS圓角
IE:不支持圓角
FF: -moz-border-radius:4px,或者-moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius- bottomright:4px;

CSS雙線凹凸邊框
IE:border:2px outset;
FF: -moz-border-top-colors: #d4d0c8 white;-moz-border-left-colors: #d4d0c8 white;-moz-border-right-colors:#404040 #808080;-moz-border-bottom-colors:#404040 #808080;

轉載于:https://www.cnblogs.com/yangliulang/archive/2012/11/14/2769824.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379119.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379119.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379119.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Double類compareTo()方法與示例

雙類compareTo()方法 (Double class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Double-object against the given Double-obje…

平院實訓門禁系統導入

這是我的配置&#xff08;如果是Win10最好每一步都管理員身份運行&#xff09; win7 SQLServer2008 VS2012 切記&#xff1a;注意&#xff1a;當你SQLserver創建數據庫和VS連接數據庫的時候得用同一種方式&#xff0c;要么都用window&#xff08;主機名&#xff09;&#xff0…

ffmpeg 解碼音頻(aac、mp3)輸出pcm文件

ffmpeg 解碼音頻&#xff08;aac、mp3&#xff09;輸出pcm文件 播放pcm可以參考&#xff1a; ffplay -ar 48000 -ac 2 -f f32le out.pcm main.c #include <stdio.h> #include <stdlib.h> #include <string.h>#include <libavutil/frame.h> #include …

Jquery getJSON()

getJSON與aspx 準備工作 Customer類 public class Customer{public int Unid { get; set; }public string CustomerName { get; set; }public string Memo { get; set; }public string Other { get; set; }}&#xff08;一&#xff09;ashx Customer customer new Customer { …

北京中信銀行總行地址_中信銀行拉薩分行舉行“存款保險標識”啟用和存款保險條例宣傳活動...

11月NOV中信銀行拉薩分行舉行“存款保險標識”啟用和《存款保險條例》宣傳活動揭牌啟用儀式111月Jul根據人民銀行和總行關于“存款保險標識”啟用工作相關要求&#xff0c;分行行領導高度重視“存款保險標識”啟用和《存款保險條例》宣傳活動工作&#xff0c;按照統一工作部署、…

Java ClassLoader getPackage()方法與示例

ClassLoader類的getPackage()方法 (ClassLoader Class getPackage() method) getPackage() method is available in java.lang package. getPackage()方法在java.lang包中可用。 getPackage() method is used to return the package that has been defined in ClassLoader or t…

C---編寫程序:求出1~1000之間能被7或12整除,但不能同時被二者整除的所有整數,將結果保存在數組中,要求程序數據的輸入、計算和輸出均使用函數實現。

編寫程序&#xff1a;求出1~1000之間能被7或12整除&#xff0c;但不能同時被二者整除的所有整數&#xff0c;將結果保存在數組中&#xff0c;要求程序數據的輸入、計算和輸出均使用函數實現。 編程思路&#xff1a;分別編寫函數input()、cal()、output()實現數據的輸入、計算和…

報告稱我國成最大移民輸出國 將形成投資產業鏈(關注)

時代特有的現象&#xff0c;我們應該予以關注 “現在國內房價這么高&#xff0c;政策也看不清&#xff0c;還不如逢高賣掉之前買的幾套房子&#xff0c;一兩套房子的錢辦個投資移民&#xff0c;趁還年輕&#xff0c;拿到綠卡后享受一下美國本國待遇的高等教育了。”廣州&#x…

轉整型_156.Ruby烘焙大理石豆沙吐司解鎖大理石花紋整型

好看又好吃的大理石豆沙面包。紅豆餡均勻分布在松軟細膩的面包體里&#xff0c;手撕著吃&#xff0c;一層層的甜美與溫柔&#xff5e;關于吐司面包&#xff0c;我公眾號里寫過白吐司(基礎款牛奶吐司&#xff0c;超綿鮮奶油吐司)和全麥吐司(基礎款50%全麥吐司&#xff0c;經典燕…

ffmpeg 解碼視頻(h264、mpeg2)輸出yuv420p文件

ffmpeg 解碼視頻&#xff08;h264、mpeg2&#xff09;輸出yuv420p文件 播放yuv可以參考&#xff1a;ffplay -pixel_format yuv420p -video_size 768x320 -framerate 25 out.yuv main.c #include <stdio.h> #include <stdlib.h> #include <string.h>#includ…

VS2010 快捷鍵 (空格顯示 綠點, Tab 顯示箭頭)

VS2010 有用的快捷鍵 &#xff1a; Ctrl r, ctrl w, 切換空格示。 轉載于:https://www.cnblogs.com/fengye87626/archive/2012/11/21/2780716.html

C---編寫程序:實現一個隨堂測試,能進行加減乘除運算。要求如下:(1)隨機產生兩個1~10的正整數,在屏幕上輸出題目,如:5+3=?(2)學生輸入答案,程序檢查學生輸入答案是否正確,若正確,

編寫程序&#xff1a;實現一個隨堂測試&#xff0c;能進行加減乘除運算。要求如下&#xff1a; 1&#xff09;隨機產生兩個1~10的正整數&#xff0c;在屏幕上輸出題目&#xff0c;如&#xff1a;53&#xff1f; 2&#xff09;學生輸入答案&#xff0c;程序檢查學生輸入答案是…

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 這兩個box信息

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 這兩個box信息 &#xff08;因為這兩個box在音頻trak和視頻trak 下都有的&#xff0c;而且都有一個數組的值是比較繞的&#xff09; 目錄&#xff1a;stts&#xff1a;記錄時間戳的&#xff0c;每個s…

利用SQL注入2分鐘入侵網站

說起流光、溯雪、亂刀&#xff0c;可以說是大名鼎鼎無人不知無人不曉&#xff0c;這些都是小榕哥的作品。每次一提起小榕哥來&#xff0c;我的崇拜景仰就如滔滔江水&#xff0c;連綿不絕~~~~&#xff08;又來了&#xff01;&#xff09; 讓我們崇拜的小榕哥最新又發布了SQL注入…

pip安裝deb_技術|如何在 Ubuntu 上安裝 pip

pip 是一個命令行工具&#xff0c;允許你安裝 Python 編寫的軟件包。 學習如何在 Ubuntu 上安裝 pip 以及如何使用它來安裝 Python 應用程序。有許多方法可以在 Ubuntu 上安裝軟件。 你可以從軟件中心安裝應用程序&#xff0c;也可以從下載的 DEB 文件、PPA(LCTT 譯注&#xff…

assubclass_Java類class asSubclass()方法及示例

assubclass類類asSubclass()方法 (Class class asSubclass() method) asSubclass() method is available in java.lang package. asSubclass()方法在java.lang包中可用。 asSubclass() method casts this Class object to denote a subclass of the class denoted by the given…

VB6.0 怎樣啟用控件comdlg32.ocx

VB6.0 怎樣啟用控件comdlg32.ocx 怎樣啟用控件comdlg32.ocx 2008-10-08 09:32 提問者&#xff1a; nefu_20061617 |瀏覽次數&#xff1a;1502次vbs文件中有代碼Set ComDlg CreateObject("MSComdlg.CommonDialog")運行時發生錯誤ActiveX 部件不能創建對象: MSComdlg.…

Python---爬蟲案例

例1、爬取公眾號文章中的圖片。 1&#xff0c;首先打開要獲取公眾號文章的地址 2&#xff0c;按下F12&#xff0c;再按Ctrl Shift C&#xff0c;然后鼠標移動到圖片位置&#xff0c;然后觀察控制臺中顯示圖片對應的代碼位置 3&#xff0c;分析該位置的代碼段 代碼段如下&…

WinCE驅動開發問題精華集錦(二)

轉自&#xff1a;http://hgh123.blog.163.com/blog/static/5980422120086183115543/ 感謝 我怎么能在PB左邊的定制平臺加進我的驅動呢&#xff1f; 兩種辦法&#xff1a; 1、在platform.bib或者project.bib的MODULES部分添加一條語句&#xff0c;例如&#xff1a; MyDriver.dll…

報錯Unable to resolve target android-5

報錯信息&#xff1a;Error:Unable to resolve target android-X&#xff08;X是一個數字&#xff09; 錯誤分析&#xff1a;這種錯誤一般大部分是SDK 版本不符所造成的&#xff0c;一般會在Ecplise工作空間導入項目時候出現此錯誤&#xff0c;一般提示&#xff1a;Error:Unabl…