憶風
光是知道是不夠的,必須要加以應用;光是希望是不夠的,非去做不可。
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
憶風
閱讀(1157)
評論(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 憶風
主站蜘蛛池模板:
国产成人久久精品亚洲小说
|
亚洲人成网网址在线看
|
91青青国产在线观看免费
|
亚洲人成电影网站色
|
亚洲二区在线视频
|
国产又大又粗又硬又长免费
|
99蜜桃在线观看免费视频网站
|
毛片a级毛片免费播放下载
|
sss日本免费完整版在线观看
|
亚洲w码欧洲s码免费
|
亚洲福利视频导航
|
在线A亚洲老鸭窝天堂
|
成人免费视频国产
|
四虎影视永久免费观看地址
|
丰满亚洲大尺度无码无码专线
|
亚洲天堂中文字幕在线
|
国产成人午夜精品免费视频
|
999任你躁在线精品免费不卡
|
亚洲精品偷拍视频免费观看
|
免费一级全黄少妇性色生活片
|
亚洲丁香婷婷综合久久
|
亚洲人成人伊人成综合网无码
|
亚洲第一区二区快射影院
|
亚洲va在线va天堂va手机
|
亚洲六月丁香六月婷婷色伊人
|
亚洲性69影院在线观看
|
亚洲av乱码一区二区三区
|
亚洲国产成人综合
|
国产成人亚洲精品电影
|
成人无码区免费A∨直播
|
中文字幕视频在线免费观看
|
免费91麻豆精品国产自产在线观看
|
一区二区三区在线观看免费
|
精品一区二区三区免费视频
|
免费精品一区二区三区第35
|
九九精品免费视频
|
亚洲国产精品尤物yw在线
|
亚洲人成电影在在线观看网色
|
亚洲欧美日韩中文无线码
|
十八禁视频在线观看免费无码无遮挡骂过
|
99视频免费播放
|