憶風(fēng)
光是知道是不夠的,必須要加以應(yīng)用;光是希望是不夠的,非去做不可。
BlogJava
首頁
新隨筆
聯(lián)系
聚合
管理
隨筆-84 評論-56 文章-0 trackbacks-0
IE和Firefox的兼容問題
IE和Firefox的兼容問題
在E桌面
http://www.epopos.com
開發(fā)過程中總結(jié)了一些IE和Firefox的兼容問題。
1
、Event的問題
在ie中我們可以直接使用event變量,但是在firefox下由于event是局部變量,firefox下我們可以事件綁定到元素上 例如
<input type="button" onclick="doEvent (event)">
為了同時兼容ie和firefox 通常在函數(shù)種通過以下代碼獲得事件。
var theEvent = window.event||e;
var srcElement = theEvent.srcElement;
if (!srcElement) {
srcElement = theEvent.target;
}
2
、濾鏡問題
在IE下是用.filters.alpha.opacity
在Firefox下是用.style.opacity
一般是來設(shè)置元素的透明度,所以我們一般通過以下代碼來解決兼容問題
var IE = navigator.userAgent.indexOf("MSIE")>0? 1: 0;
if(IE)
{
obj.filters.alpha.opacity;
}
Else
{
obj.style.opacity;
}
3
、innerText
IE下我們經(jīng)常使用innerText,但是Firefox不支持此寫法,通常我們寫成textContent. 它同時兼容IE和firefox,建議大家采用textContent.對于沒有html標(biāo)簽的我們也可以采用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下,只能使用[]獲取集合類對象.
解決方法:統(tǒng)一使用[]獲取集合類對象.
7
、
自定義屬性問題
說明:IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;Firefox下,只能使用getAttribute()獲取自定義屬性.
解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性.
8
、
eval("idName")
問題
說明:IE下,,可以使用eval("idName")或getElementById("idName")來取得id為idName的HTML對象;Firefox下只能使用getElementById("idName")來取得id為idName的HTML對象.
解決方法:統(tǒng)一用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關(guān)鍵字或var關(guān)鍵字來定義常量;IE下,只能使用var關(guān)鍵字來定義常量.
解決方法:統(tǒng)一使用var關(guān)鍵字來定義常量.
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
、
模態(tài)和非模態(tài)窗口問題
說明:IE下,可以通過showModalDialog和showModelessDialog打開模態(tài)和非模態(tài)窗口;Firefox下則不能.
解 決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口。如果需要將子窗口中的參數(shù)傳遞回父窗口,可 以在子窗口中使用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內(nèi)容:
在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"來切換frame的內(nèi)容.
如果需要將frame中的參數(shù)傳回父窗口,可以在frme中使用parent來訪問父窗口。例如:parent.document.form1.filename.value="Aqing";
16
、
body
問題
Firefox的body在body標(biāo)簽沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標(biāo)簽被瀏覽器完全讀入之后才存在.
例如:
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()在這之前已被實現(xiàn)
Firefox:document.body.onload = inject();
document.body.onload=new Function('inject()');
18
、
cursor:hand
和 cursor:pointer
firefox不支持hand,但ie支持pointer
解決方法: 統(tǒng)一使用pointer
19
、
FireFox
中類似 obj.style.height = imgObj.height 的語句無效
解決方法:
obj.style.height = imgObj.height + 'px';
20
、
ie,firefox
以及其它瀏覽器對于 table 標(biāo)簽的操作都各不相同,在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等列表的縮進時
樣式應(yīng)寫成: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") 可以得到得到所有標(biāo)簽元素的集合
getElementById("idName") 可以按id得到某一元素
getElementsByName("Name") 可以得到按name屬性得到某一元素
27
、firefox 中使用innerHTML 的方法
<div id="online"></div>
document.all.online.innerHTML; //這種方法在IE中可以使用,但不是標(biāo)準(zhǔn)方法
document.getElementById("online").innerHTML; //這樣firefox就能使用innerHTML了
28
、eval()與window.execScript()執(zhí)行腳本
IE、firerox均支持eval(),firefox不支持window.execScript()
解決:統(tǒng)一使用eval()
29
、
e.button
鍵值有別于event.button,只有3個鍵值而無組合鍵值
30
、
insertAdjacentHTML
和 insertAdjacentText
insertAdjacentHTML 和 insertAdjacentText 是IE下特有的JS,功能非常好用
可惜Firefox 沒有這兩東東,不過,加上下面的這段的,F(xiàn)irefox下也可以支持這
兩個方法了
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的鼠標(biāo)滾輪事件
滾輪IE和Firefox的代碼不一樣:
IE是mousewheel事件,F(xiàn)irefox是DOMMouseScroll事件
事件屬性,IE是event.wheelDelta,F(xiàn)irefox是event.detail
屬性的方向值也不一樣,IE向上滾 > 0,F(xiàn)irefox向下滾 > 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個參數(shù),第一個參數(shù)是事件名,第二個參數(shù)是事件觸發(fā)后所響應(yīng)的方法. 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
憶風(fēng)
閱讀(1164)
評論(1)
編輯
收藏
所屬分類:
JavaScript
評論:
#
re: IE和Firefox的兼容問題
2008-09-17 23:36 |
飛兒
不錯 *_*
回復(fù)
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
風(fēng)聲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)
數(shù)據(jù)結(jié)構(gòu)與算法(3)
武術(shù)(3)
生活感悟(13)
設(shè)計模式(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
冉翔的技術(shù)專欄
千鳥志
哥哥的Blog
成都心情
截拳道行者
林信良(良葛格)的專欄
爪哇人
臧圩人
邢紅瑞的blog
邱老師的Blog
鏡花水月
阿蜜果
參考手冊
51chm
CSS手冊
DHTML手冊
HTML手冊
JScript手冊
MSDN
SQL手冊
我的其他博客
憶風(fēng) blog
我的學(xué)習(xí)鏈接
Cwiki Apache Software Foundation
IBM開發(fā)者工作室
JavaWorld@TW
JAVA中文世界社區(qū)
Java堂
JAVA開源
Java開源大全
java最大交流社區(qū)
JBoss ESB Introduction (written in chinese)
jBPM3 Wiki
J道
LinuxSir
Maven權(quán)威指南
Sun 中國技術(shù)社區(qū)
w3school
XML實用大全
博客園 - 程序員的網(wǎng)上家園
正則表達式
滿江紅開源
良葛格的學(xué)習(xí)筆記
搜索
最新評論
1.?re: HttpClient POST的中文編碼問題[未登錄]
評論內(nèi)容較長,點擊標(biāo)題查看
--hp
2.?re: IntelliJ IDEA 目錄技巧[未登錄]
誤人子弟,哪個告訴你idea不能熱部署不能自動編譯的,發(fā)表文章分享值得鼓勵,但是也請自己先學(xué)會了再來發(fā)表,你這樣會初學(xué)者走很多彎路。
idea絕對比eclipse在用戶體驗方面強N多倍
--naruto
3.?re: HttpClient POST的中文編碼問題
對方是個玩
--阿斯蒂芬
4.?re: HttpClient POST的中文編碼問題
sd
--sd
5.?re: HttpClient POST的中文編碼問題
評論內(nèi)容較長,點擊標(biāo)題查看
--zuidaima
閱讀排行榜
1.?IntelliJ IDEA 目錄技巧(52851)
2.?HttpClient POST的中文編碼問題(44388)
3.?使用IntelliJ IDEA自動在線升級服務(wù)(8545)
4.?Vibrant Ink Theme for IntelliJ IDEA(7234)
5.?1億動態(tài)pv/天的超級數(shù)據(jù)庫緩存解決方案,開源了,還有測試代碼。(4096)
評論排行榜
1.?《截拳道之道-李小龍》(Tao of Jeet Kune Do - Bruce Lee)英文原著[pdf] (10)
2.?HttpClient POST的中文編碼問題(9)
3.?1億動態(tài)pv/天的超級數(shù)據(jù)庫緩存解決方案,開源了,還有測試代碼。(8)
4.?IntelliJ IDEA 目錄技巧(6)
5.?java面試題及答案(基礎(chǔ)題122道,代碼題19道) (3)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 憶風(fēng)
主站蜘蛛池模板:
91免费国产在线观看
|
亚洲精品国产精品
|
91嫩草国产在线观看免费
|
A国产一区二区免费入口
|
亚洲av无码一区二区三区天堂
|
亚洲国产精品综合久久2007
|
亚洲精品成人无码中文毛片不卡
|
国产成人免费全部网站
|
性做久久久久免费看
|
久久久久久精品免费看SSS
|
中国人免费观看高清在线观看二区
|
亚洲激情校园春色
|
亚洲成a人片在线观
|
亚洲日韩乱码中文无码蜜桃臀
|
亚洲国产天堂在线观看
|
亚洲国产精品自在在线观看
|
久久精品国产亚洲麻豆
|
久久久久久亚洲精品不卡
|
久久青草亚洲AV无码麻豆
|
亚洲男女性高爱潮网站
|
亚洲精品国产成人中文
|
国产亚洲福利在线视频
|
黄色a三级三级三级免费看
|
岛国岛国免费V片在线观看
|
国产线视频精品免费观看视频
|
91精品全国免费观看含羞草
|
免费播放在线日本感人片
|
四虎成人精品永久免费AV
|
国产免费观看a大片的网站
|
亚洲综合久久久久久中文字幕
|
一个人看的www视频免费在线观看 一个人看的免费观看日本视频www
|
久久亚洲综合色一区二区三区
|
国产精品亚洲专区无码WEB
|
久久成人国产精品免费软件
|
亚洲AV午夜福利精品一区二区
|
边摸边脱吃奶边高潮视频免费
|
成人免费午夜无码视频
|
亚洲网红精品大秀在线观看
|
国产精品免费看久久久
|
国产亚洲精品美女久久久
|
东方aⅴ免费观看久久av
|