憶風
光是知道是不夠的,必須要加以應用;光是希望是不夠的,非去做不可。
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-84 評論-56 文章-0 trackbacks-0
IE和Firefox的兼容問題
IE和Firefox的兼容問題
在E桌面
http://www.epopos.com
開發過程中總結了一些IE和Firefox的兼容問題。
1
、Event的問題
在ie中我們可以直接使用event變量,但是在firefox下由于event是局部變量,firefox下我們可以事件綁定到元素上 例如
<input type="button" onclick="doEvent (event)">
為了同時兼容ie和firefox 通常在函數種通過以下代碼獲得事件。
var theEvent = window.event||e;
var srcElement = theEvent.srcElement;
if (!srcElement) {
srcElement = theEvent.target;
}
2
、濾鏡問題
在IE下是用.filters.alpha.opacity
在Firefox下是用.style.opacity
一般是來設置元素的透明度,所以我們一般通過以下代碼來解決兼容問題
var IE = navigator.userAgent.indexOf("MSIE")>0? 1: 0;
if(IE)
{
obj.filters.alpha.opacity;
}
Else
{
obj.style.opacity;
}
3
、innerText
IE下我們經常使用innerText,但是Firefox不支持此寫法,通常我們寫成textContent. 它同時兼容IE和firefox,建議大家采用textContent.對于沒有html標簽的我們也可以采用innerHTML替代。
4
、event.srcElement
IE下,event對象有srcElement屬性,但是沒有target屬性;Firefox下,event對象有target屬性,但是沒有srcElement屬性.
解決方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)
5
、 parentNode替代parentElement
在IE中我可以通過obj.parentElement獲得父元素,但是firex下不支持
因為firefox與IE都支持DOM,所有我們可以采用obj.parentNode來解決。
6
、
集合類對象問題
IE下,可以使用()或[]獲取集合類對象;Firefox下,只能使用[]獲取集合類對象.
解決方法:統一使用[]獲取集合類對象.
7
、
自定義屬性問題
說明:IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;Firefox下,只能使用getAttribute()獲取自定義屬性.
解決方法:統一通過getAttribute()獲取自定義屬性.
8
、
eval("idName")
問題
說明:IE下,,可以使用eval("idName")或getElementById("idName")來取得id為idName的HTML對象;Firefox下只能使用getElementById("idName")來取得id為idName的HTML對象.
解決方法:統一用getElementById("idName")來取得id為idName的HTML對象.
9
、
變量名與某HTML對象ID相同的問題
說明:IE下,HTML對象的ID可以作為document的下屬對象變量名直接使用;Firefox下則不能.Firefox下,可以使用與HTML對象ID相同的變量名;IE下則不能。
解決方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML對象ID相同的變量名,以減少錯誤;在聲明變量時,一律加上var,以避免歧義.
10
、
const
問題
說明:Firefox下,可以使用const關鍵字或var關鍵字來定義常量;IE下,只能使用var關鍵字來定義常量.
解決方法:統一使用var關鍵字來定義常量.
11
、
input.type
屬性問題
說明:IE下input.type屬性為只讀;但是Firefox下input.type屬性為讀寫.
12
、
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.
13
、
window.location.href
問題
說明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location.
解決方法:使用window.location來代替window.location.href.
14
、
模態和非模態窗口問題
說明:IE下,可以通過showModalDialog和showModelessDialog打開模態和非模態窗口;Firefox下則不能.
解 決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口。如果需要將子窗口中的參數傳遞回父窗口,可 以在子窗口中使用window.opener來訪問父窗口. 例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";
15
、
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中的參數傳回父窗口,可以在frme中使用parent來訪問父窗口。例如:parent.document.form1.filename.value="Aqing";
16
、
body
問題
Firefox的body在body標簽沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標簽被瀏覽器完全讀入之后才存在.
例如:
Firefox:
<body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
}
</script>
</body>
IE&Firefox:
<body>
</body>
<script type="text/javascript">
document.body.onclick = function(evt){
evt = evt || window.event;
alert(evt);
} </script>
17
、
事件委托方法
IE:document.body.onload = inject; //Function inject()在這之前已被實現
Firefox:document.body.onload = inject();
document.body.onload=new Function('inject()');
18
、
cursor:hand
和 cursor:pointer
firefox不支持hand,但ie支持pointer
解決方法: 統一使用pointer
19
、
FireFox
中類似 obj.style.height = imgObj.height 的語句無效
解決方法:
obj.style.height = imgObj.height + 'px';
20
、
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);
21
、
padding
問題
padding 5px 4px 3px 1px FireFox無法解釋簡寫,必須改成 padding-top:5px; padding-right:4px; padding-bottom:3px; padding-left:1px;
22
、
消除ul、ol等列表的縮進時
樣式應寫成:list-style:none;margin:0px;padding:0px;
其中margin屬性對IE有效,padding屬性對FireFox有效
23
、
CSS
透明
IE:filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:opacity:0.6。
24
、
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;。
25
、
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;
26
、
ie
支持document.all 而firefox 不支持
改用下面三個tag的其中一個來代替document.all
getElementsByTagName("tagName") 可以得到得到所有標簽元素的集合
getElementById("idName") 可以按id得到某一元素
getElementsByName("Name") 可以得到按name屬性得到某一元素
27
、firefox 中使用innerHTML 的方法
<div id="online"></div>
document.all.online.innerHTML; //這種方法在IE中可以使用,但不是標準方法
document.getElementById("online").innerHTML; //這樣firefox就能使用innerHTML了
28
、eval()與window.execScript()執行腳本
IE、firerox均支持eval(),firefox不支持window.execScript()
解決:統一使用eval()
29
、
e.button
鍵值有別于event.button,只有3個鍵值而無組合鍵值
30
、
insertAdjacentHTML
和 insertAdjacentText
insertAdjacentHTML 和 insertAdjacentText 是IE下特有的JS,功能非常好用
可惜Firefox 沒有這兩東東,不過,加上下面的這段的,Firefox下也可以支持這
兩個方法了
if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement)
{
HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
{
switch (where)
{
case 'beforeBegin':
this.parentNode.insertBefore(parsedNode,this)
break;
case 'afterBegin':
this.insertBefore(parsedNode,this.firstChild);
break;
case 'beforeEnd':
this.appendChild(parsedNode);
break;
case 'afterEnd':
if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
else this.parentNode.appendChild(parsedNode);
break;
}
}
HTMLElement.prototype.insertAdjacentHTML = function (where,htmlStr)
{
var r = this.ownerDocument.createRange();
r.setStartBefore(this);
var parsedHTML = r.createContextualFragment(htmlStr);
this.insertAdjacentElement(where,parsedHTML)
}
HTMLElement.prototype.insertAdjacentText = function (where,txtStr)
{
var parsedText = document.createTextNode(txtStr)
this.insertAdjacentElement(where,parsedText)
}
}
31
、
elementFromPoint
Ie下有elementFromPoint方法,但是firefox沒有,可以重寫該方法
Document.prototype.elementFromPoint = function(x, y)
{
this.addEventListener("mousemove", this.elementFromPoint__handler, false);
var event = this.createEvent("MouseEvents");
var box = this.getBoxObjectFor(this.documentElement);
var screenDelta = { x: box.screenX, y: box.screenY };
event.initMouseEvent("mousemove", true, false, this.defaultView, 0,
x + screenDelta.x, y + screenDelta.y, x, y,
false, false, false, false, 0, null);
this.dispatchEvent(event);
this.removeEventListener("mousemove", this.elementFromPoint__handler, false);
return this.elementFromPoint__target;
}
Document.prototype.elementFromPoint__handler = function (event)
{
this.elementFromPoint__target = event.explicitOriginalTarget;
if (this.elementFromPoint__target.nodetype == Node.TEXT_NODE)
this.elementFromPoint__target = this.elementFromPoint__target.parentNode;
if (this.elementFromPoint__target.nodeName.toUpperCase() == "HTML" && this.documentElement.nodeName.toUpperCase() == "HTML")
this.elementFromPoint__target = this.getElementsByTagName("BODY").item(0);
//****added this code to check for textboxes and textareas
if ( this.elementFromPoint__target.nodeName=="#document" )//possible textbox or textarea
{
rp = event.rangeParent;
alert("event.rangeParent = " + rp);
if ( event.rangeParent.nodetype == Node.TEXT_NODE )//textbox with a value
this.elementFromPoint__target = event.rangeParent.parentNode.parentNode;
else if ( event.rangeParent.nodeName == 'div' )//textbox without a value
this.elementFromPoint__target = event.rangeParent.parentNode;
}
//****end. However this cause permission denied as the rangeParent object appears to be private!
event.preventdefault();
event.stopPropagation();
}
Document.prototype.elementFromPoint__target = null;
32
、mousewheel事件
firefox 沒有 mousewheel 事件。可以通過以下方法解決.
<script>
var n=0;
function mwEvent(e)
{
if (!e) e = window.event;
if ( e.wheelDelta <= 0 || e.detail > 0) { n++; }
else { n--; }
window.status=n;
}
if(document.attachEvent){
document.attachEvent("onmousewheel",mwEvent);
}else{
window.addEventListener("DOMMouseScroll", mwEvent, false);
}
</script>
33
、
IE和FireFox的鼠標滾輪事件
滾輪IE和Firefox的代碼不一樣:
IE是mousewheel事件,Firefox是DOMMouseScroll事件
事件屬性,IE是event.wheelDelta,Firefox是event.detail
屬性的方向值也不一樣,IE向上滾 > 0,Firefox向下滾 > 0
//滾輪放大或縮小,基于Prototype 1.6
var scrollfunc = function(event) {
var direct = 0;
if (event.wheelDelta) {
direct = event.wheelDelta > 0 ? 1 : -1;
} else if (event.detail) {
direct = event.detail < 0 ? 1 : -1;
}
zoom(direct);
};
Event.observe(document, 'mousewheel', scrollfunc);
Event.observe(document, 'DOMMouseScroll', scrollfunc); //firefox
34
、
attachEvent
方法
attachEvent方法解釋:
attachEvent有2個參數,第一個參數是事件名,第二個參數是事件觸發后所響應的方法. Firefox下解決方法是
Object.prototype.attachEvent=function(method,func)
{
if(!this[method])
this[method]=func;
else
this[method]=this[method].attach(func);
}
Function.prototype.attach=function(func){
var f=this;
return function(){
f();
func();
}
}
36
、
title
替代alt
在firefox和ie盡力都用title,alt在firefox下不起作用
posted on 2008-09-15 00:53
憶風
閱讀(1158)
評論(1)
編輯
收藏
所屬分類:
JavaScript
評論:
#
re: IE和Firefox的兼容問題
2008-09-17 23:36 |
飛兒
不錯 *_*
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
風聲JS菜單樹
javascript正則表達式使用詳解
用JavaScript刷新框架子頁面的8種方法
IE和Firefox的兼容問題
以無法為有法;以無限為有限
<
2008年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Ajax(7)
DataBase(1)
Div & CSS(5)
English
Flex(1)
IDE(13)
Java EE(18)
Java SE(2)
JavaScript(4)
Rails&Ruby
WebService&SOA(2)
數據結構與算法(3)
武術(3)
生活感悟(13)
設計模式(2)
軟件工程(6)
隨筆檔案
2014年8月 (3)
2010年5月 (1)
2009年12月 (1)
2009年11月 (1)
2009年10月 (2)
2009年8月 (1)
2009年2月 (1)
2009年1月 (2)
2008年12月 (12)
2008年11月 (10)
2008年10月 (11)
2008年9月 (18)
2008年8月 (21)
相冊
MyPhoto
圖片庫
Blogroll
Anders Nor?s' Blog
anotherbug的博客
DBA notes
ESB zone
James Gosling's
Java夜未眠
SIMONE
wakaleo
冉翔的技術專欄
千鳥志
哥哥的Blog
成都心情
截拳道行者
林信良(良葛格)的專欄
爪哇人
臧圩人
邢紅瑞的blog
邱老師的Blog
鏡花水月
阿蜜果
參考手冊
51chm
CSS手冊
DHTML手冊
HTML手冊
JScript手冊
MSDN
SQL手冊
我的其他博客
憶風 blog
我的學習鏈接
Cwiki Apache Software Foundation
IBM開發者工作室
JavaWorld@TW
JAVA中文世界社區
Java堂
JAVA開源
Java開源大全
java最大交流社區
JBoss ESB Introduction (written in chinese)
jBPM3 Wiki
J道
LinuxSir
Maven權威指南
Sun 中國技術社區
w3school
XML實用大全
博客園 - 程序員的網上家園
正則表達式
滿江紅開源
良葛格的學習筆記
搜索
最新評論
1.?re: HttpClient POST的中文編碼問題[未登錄]
評論內容較長,點擊標題查看
--hp
2.?re: IntelliJ IDEA 目錄技巧[未登錄]
誤人子弟,哪個告訴你idea不能熱部署不能自動編譯的,發表文章分享值得鼓勵,但是也請自己先學會了再來發表,你這樣會初學者走很多彎路。
idea絕對比eclipse在用戶體驗方面強N多倍
--naruto
3.?re: HttpClient POST的中文編碼問題
對方是個玩
--阿斯蒂芬
4.?re: HttpClient POST的中文編碼問題
sd
--sd
5.?re: HttpClient POST的中文編碼問題
評論內容較長,點擊標題查看
--zuidaima
閱讀排行榜
1.?IntelliJ IDEA 目錄技巧(52831)
2.?HttpClient POST的中文編碼問題(44370)
3.?使用IntelliJ IDEA自動在線升級服務(8519)
4.?Vibrant Ink Theme for IntelliJ IDEA(7219)
5.?1億動態pv/天的超級數據庫緩存解決方案,開源了,還有測試代碼。(4088)
評論排行榜
1.?《截拳道之道-李小龍》(Tao of Jeet Kune Do - Bruce Lee)英文原著[pdf] (10)
2.?HttpClient POST的中文編碼問題(9)
3.?1億動態pv/天的超級數據庫緩存解決方案,開源了,還有測試代碼。(8)
4.?IntelliJ IDEA 目錄技巧(6)
5.?java面試題及答案(基礎題122道,代碼題19道) (3)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 憶風
主站蜘蛛池模板:
四虎永久在线精品免费网址
|
国产成A人亚洲精V品无码
|
免费的黄色网页在线免费观看
|
AV片在线观看免费
|
亚洲人成黄网在线观看
|
国产最新凸凹视频免费
|
亚洲精品动漫免费二区
|
日本特黄特黄刺激大片免费
|
亚洲日本乱码卡2卡3卡新区
|
大学生a级毛片免费观看
|
国产亚洲中文日本不卡二区
|
日韩精品视频免费观看
|
国内成人精品亚洲日本语音
|
国产在线播放免费
|
免费国产草莓视频在线观看黄
|
亚洲AV无码乱码精品国产
|
一级A毛片免费观看久久精品
|
亚洲精品一级无码中文字幕
|
久久99久久成人免费播放
|
亚洲精品专区在线观看
|
国产精品酒店视频免费看
|
亚洲一区二区三区成人网站
|
在线A亚洲老鸭窝天堂
|
手机看片国产免费永久
|
久久精品亚洲一区二区三区浴池
|
午夜免费1000部
|
亚洲国产成人综合精品
|
亚洲精品国产综合久久一线
|
a级特黄毛片免费观看
|
18gay台湾男同亚洲男同
|
毛色毛片免费观看
|
日本一区二区在线免费观看
|
亚洲AV无码成人专区片在线观看
|
四虎成年永久免费网站
|
MM1313亚洲精品无码久久
|
亚洲精品国产精品乱码在线观看
|
30岁的女人韩剧免费观看
|
野花视频在线官网免费1
|
久久精品7亚洲午夜a
|
国内一级一级毛片a免费
|
香蕉免费在线视频
|