首頁 web前端 js教程 兼容IE和FF的js脚本代码小结(比较常用)_javascript技巧

兼容IE和FF的js脚本代码小结(比较常用)_javascript技巧

May 16, 2016 pm 06:14 PM
ff ie 相容

/*以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefox */

//window.event
IE:有window.event对象
FF:没有window.event对象。可以通过给函数的参数传递event对象。如onmousemove=doMouseMove(event)
解决方法:var event = event || window.event;
example:

复制代码 代码如下:

<script> <BR>function test(event) { <BR>var event = event || window.event; <BR>//do Something <BR>} <BR></script>



//鼠标当前坐标
IE:event.x和event.y。
FF:event.pageX和event.pageY。
通用:两者都有event.clientX和event.clientY属性。

//鼠标当前坐标(加上滚动条滚过的距离)
IE:event.offsetX和event.offsetY。
FF:event.layerX和event.layerY。
解决方法:
复制代码 代码如下:

<script> <BR>function test(event) { <BR>var event = event || window.event; <BR>//or var event = event ? event : window.event;//这2中都可以,也可以用if else(这简写) <BR>var x = event.offsetX || event.layerX; <BR>var y = event.offsetY || event.layerY; <BR>//do Something <BR>} <BR></script>


/**其他的兼容的解决方法类似,不再一一举例**/

//event.srcElement问题
说明:IE下,event对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,
但是没有srcElement属性.
解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)
来代替IE下的event.srcElement或者
Firefox下的event.target. 请同时注意event的兼容性问题。

//event.toElement问题
问题:
IE下,even对象有srcElement属性,但是没有target属性;
Firefox下,even对象有target属性,但是没有srcElement属性
解决方法:
var target = e.relatedTarget || e.toElement;

//标签的x和y的坐标位置:style.posLeft 和 style.posTop
IE:有。
FF:没有。
通用:object.offsetLeft 和 object.offsetTop。

//窗体的高度和宽度
IE:document.body.offsetWidth和document.body.offsetHeight。注意:此时页面一定要有body标签。
FF:window.innerWidth和window.innerHegiht,
以及document.documentElement.clientWidth和document.documentElement.clientHeight。
通用:document.body.clientWidth和document.body.clientHeight。

//添加事件
IE:element.attachEvent("onclick", function);。
FF:element.addEventListener("click", function, true)。
通 用:element.onclick=function。虽然都可以使用onclick事件,但是onclick和上面两种方法的效果是不一样的,
onclick 只有执行一个过程,而attachEvent和addEventListener执行的是一个过程列表,也就是多个过程。
例如:element.attachEvent("onclick", func1);
element.attachEvent("onclick", func2)这样func1和func2都会被执行。

//标签的自定义属性
IE:如果给标签div1定义了一个属性value,可以div1.value和div1["value"]取得该值。
FF:不能用div1.value和div1["value"]取。
通用:div1.getAttribute("value")。

//document.form.item 问题
IE:现有问题:现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行
FF/IE: document.formName.elements["elementName"]

//集合/数组类对象问题
(1)现有问题:
现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。
(2)解决方法:
改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。
又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]

//HTML 对象的 id 作为对象名的问题
(1)现有问题
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
(2)解决方法
用 getElementById("idName") 代替 idName 作为对象变量使用

//用idName字符串取得对象的问题
(1)现有问题
在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。
(2)解决方法
用 getElementById(idName) 代替 eval(idName)。

//变量名与某 HTML 对象 id 相同的问题
(1)现有问题
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
(2)解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。

//document.getElementsByName() 和 document.all[name] 的问题
现有问题:在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素
(是否还有其它不能取的元素还不知道)。
//document.all
Firefox可以兼容document.all, 但会生成一条警告。可以用getElementById("*")
或者 getElementByTagName("*")来代替
不过对于document.all.length等属性,则完全不兼容

//input.type属性问题
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写

//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";

//frame问题
以下面的frame为例:

(1)访问frame对象:
IE:使用window.frameId或者window.frameName来访问这个frame对象. frameId和frameName可以同名。
FF:只能使用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中的参数传回父窗口(注意不是opener,而是parent frame),可以在frme中使用parent来访问父窗口。
例如:window.parent.document.form1.filename.value="Aqing";

//body问题
Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全读入之后才存在

//事件委托方法
IE:document.body.onload = inject; //Function inject()在这之前已被实现
FF:document.body.onload = inject();

//firefox与IE的父元素(parentElement)的区别
IE:obj.parentElement
FF:obj.parentNode
解决方法: 因为FF与IE都支持DOM,因此使用obj.parentNode是不错选择

//innerText在IE中能正常工作,但是innerText在FireFox中却不行. 需用textContent

//FireFox中设置HTML标签的style时,所有位置性和字体尺寸的值必须后跟px。这个ie也是支持的

//父节点、子节点和删除节点
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。

//对select的options集合操作
枚举元素除了[]外,SelectName.options.item()也是可以的, 另外SelectName.options.length,
SelectName.options.add/remove都可以在两种浏览器上使用。
注意在add后赋值元素,否则会失败
动态删除select中的所有options:
document.getElementById("ddlResourceType").options.length=0;
动态删除select中的某一项option:
document.getElementById("ddlResourceType").options.remove(indx);
动态添加select中的项option:
document.getElementById("ddlResourceType").options.add(new Option(text,value));
IE FF 动态删除通用方法:
document.getElementById("ddlResourceType").options[indx] = null;

//捕获事件
问题:
FF没有setCapture()、releaseCapture()方法
解决方法:
IE:
复制代码 代码如下:

obj.setCapture();
obj.releaseCapture();

FF:
复制代码 代码如下:

window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
if (!window.captureEvents) {
o.setCapture();
}else {
window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}
if (!window.captureEvents) {
o.releaseCapture();
}else {
window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);
}


//禁止选取网页内容
问题:
FF需要用CSS禁止,IE用JS禁止
解决方法:
IE: obj.onselectstart = function() {return false;}
FF: -moz-user-select:none;


//画图
IE:VML。
FF:SVG。

//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;。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
Internet Explorer 開啟 Edge:如何停止 MS Edge 重新導向 Internet Explorer 開啟 Edge:如何停止 MS Edge 重新導向 Apr 14, 2023 pm 06:13 PM

長期以來,InternetExplorer的失寵一直不是秘密,但隨著Windows11的到來,現實開始了。 Edge將來不再有時取代IE,它現在是微軟最新作業系統中的預設瀏覽器。目前,您仍然可以在Windows11中啟用InternetExplorer。但是,IE11(最新版本)已經有了一個正式的退役日期,即2022年6月15日,時間在流逝。考慮到這一點,您可能已經注意到InternetExplorer有時會打開Edge,而您可能不喜歡它。那為什麼會這樣呢?在

Win10最穩定的版本 Win10最穩定的版本 Dec 25, 2023 pm 07:58 PM

很多用戶都會遇到在操作電腦的時候卡頓或者是藍屏,這個時候我們就需要找一個最為穩定的win10版本來進行操作,整體都是非常的好用的,可以讓你日常使用更為流暢。史上最穩定的win10版本1、win10正版原廠系統在這裡用戶可以使用簡單的操作,系統經過優化,具有很強的穩定性、安全性、兼容性,用戶可以按照步驟實現完美機器2、俄羅斯大神精簡版win10經過嚴格的精簡操作,刪除了許多不必要的功能和服務。精簡後,系統的CPU和記憶體佔用率更低,運作速度更快。 3.win10精簡版1909安裝多台不同硬體型號的電腦

win11無法使用ie11瀏覽器怎麼辦? (win11用不了ie瀏覽器) win11無法使用ie11瀏覽器怎麼辦? (win11用不了ie瀏覽器) Feb 10, 2024 am 10:30 AM

越來越多的用戶開始升級win11系統,由於每個用戶的使用習慣不同,還是有不少用戶在使用ie11瀏覽器,那麼win11系統用不了ie瀏覽器,該怎麼辦呢? windows11還支援ie11嗎?下面就來看看解決方法。 win11無法使用ie11瀏覽器的解決方法1、先右鍵開始選單,選擇「命令提示字元(管理員)」開啟。 2.開啟之後,直接輸入“Netshwinsockreset”,回車確定。 3.確定之後再輸入「netshadvfirewallreset&rdqu

一個時代的結束:Internet Explorer 11 已退役,這是你需要知道的 一個時代的結束:Internet Explorer 11 已退役,這是你需要知道的 Apr 20, 2023 pm 06:52 PM

2022年6月15日是Microsoft結束對InternetExplorer11(IE11)的支援並關閉其舊版瀏覽器章節的日子。一段時間以來,該公司一直在提醒用戶注意這一生命週期結束日期,並呼籲他們計劃遷移到MicrosoftEdge。 Microsoft將IE11與Windows8.1捆綁在一起,作為Windows的現代預設網頁瀏覽器。儘管它從未達到Chrome的(目前)高度,但它是2014年使用量第二大的桌面瀏覽器,僅次於IE8。當然,隨著20

Win11是否支援動態壁紙 Win11是否支援動態壁紙 Jan 01, 2024 pm 06:41 PM

眾所周知,win11一大特色就是自備安卓子系統,讓我們不需要用模擬器就可以安裝安卓軟體,但也存在win11安卓應用卡頓的問題,這該怎麼解決呢。 win11不相容動態桌布麼:答:win11能相容動態壁紙,如果用不了可能是軟體或系統版本落後。如果是剛更新,可能是被系統桌布覆蓋了。 1.如果是系統或軟體版本落後,那麼更新一下系統和動態桌布軟體即可。 2.如果是被系統桌布覆蓋了,可以嘗試開啟「設定」3、接著進入「個人化」下的「背景」設定。 4.然後將個人化設定背景改為「圖」5、修改完成後就能正常設定動態桌布

Win10開啟IE自動跳到Edge怎麼取消_IE瀏覽器頁​​面自動跳轉的解決方法 Win10開啟IE自動跳到Edge怎麼取消_IE瀏覽器頁​​面自動跳轉的解決方法 Mar 20, 2024 pm 09:21 PM

近期不少的win10用戶們在使用電腦瀏覽器的時候發現自己的ie瀏覽器總是自動的跳到edge瀏覽器,那麼win10打開ie自動跳轉edge怎麼關閉?。下面就讓本站來為用戶們來仔細的介紹一下win10打開ie自動跳轉edge關閉方法吧。 1.我們登入edge瀏覽器,點選右上角...,找下拉的設定選項。 2.我們進入設定後,在左側欄點選預設瀏覽器。 3.最後我們在相容性中,勾選不允許IE模式下重新載入網站,重啟ie瀏覽器即可。

Switch2能相容於Switch卡帶嗎? Switch2能相容於Switch卡帶嗎? Jan 28, 2024 am 09:06 AM

Switch2是任天堂在2023年科隆遊戲展公佈的新機型,一些玩家擔心新出來的機型與之前版本的機型卡帶會不會存在兼容性問題,下面我們一起來看看吧。 switch2相容於switch卡帶嗎答:switch2不相容switch卡帶。 Switch2卡帶的介紹根據任天堂的生產鏈公司的消息稱,Switch2可能會使用64GB的卡帶。它由於性能更好,支撐更多的3A遊戲大作的原因,需要更大卡帶容量。因為很多的遊戲作品需要閹割和壓縮,才能塞進一張遊戲卡帶裡面。而且Switch的卡帶容易被複製遊戲內容,所以更換新卡帶

如何啟用IE的加速功能 如何啟用IE的加速功能 Jan 30, 2024 am 08:48 AM

ie加速功能怎麼開? ie打開網頁的速度太慢,我們可以在裡面開啟硬體加速模式。很多小夥伴反應說使用ie瀏覽器的時候,開啟網頁的速度特別的慢,這樣對我們瀏覽網頁也造成了一定影響。就想詢問小編有什麼解決辦法,這種情況是可以開啟ie瀏覽器的硬體加速模式,小編下面整理了ie開啟加速功能方法,感興趣的話一起往下看看! ie開啟加速功能方法開啟IE安全瀏覽器,點選右上角齒輪狀的「設定」圖標,選擇「Internet選項」進入,如圖所示。 2、在Internet選項的視窗頭部的標籤導航中點擊“進階”,如圖所示。 3、

See all articles