1.HTML對(duì)象獲取問(wèn)題
FireFox :document.getElementByld('idName');
ie:document.idname或者document.getElementByld('idName');
解決辦法:統(tǒng)一使用document.getElementByld('idName');
2.const問(wèn)題
說(shuō)明:Firefox下哼丈,可以使用const關(guān)鍵字或var 關(guān)鍵字來(lái)定義常量醉旦;
IE下:只能使用var關(guān)鍵字來(lái)定義常量桨啃。
解決方法:統(tǒng)一使用var關(guān)鍵字來(lái)定義常量
3.event.x與event.y問(wèn)題
說(shuō)明:IE下照瘾,event對(duì)象有x,y屬性析命,但是沒(méi)有pageX,pageY屬性逃默;
Firfox下完域,event對(duì)象有pageX,pageY屬性,但沒(méi)有x,y屬性凹耙;
解決辦法:使用mX(mX = event.x ? event.x : event.pageX;)來(lái)代替IE下的event.x或者Firefox下的event.pageX.
4.window.location.href問(wèn)題
說(shuō)明:IE或者Firefox2.0下使兔,可以使用window.location或者window.location.href;
Firefox1.5x下虐沥,只能使用window.location.
解決方法:使用window.location來(lái)代替window.location.href.
5.frame問(wèn)題
以下面的frame為例:
<frame src='xxx.html' id='frameId' name='frameName' />
(1)訪問(wèn)frame對(duì)象
IE:使用window.frameId或者window.frameName來(lái)訪問(wèn)這個(gè)frame對(duì)象欲险,frameId和frameName可以同名匹涮。
Firefox:只能使用window.frameName來(lái)訪問(wèn)這個(gè)frame對(duì)象。
另外喜每,在IE和Firefox中都可以使用window.document.getElementById('frameId')來(lái)訪問(wèn)這個(gè)frame對(duì)象带兜。
(2)切換frame內(nèi)容:
在IE和Firefox中都可以使用window.document.getElementById('testFrame').src = 'xxx.html'或window.frameName.location = 'xxx.html'來(lái)切換frame的內(nèi)容刚照。
如果需要將frame中的參數(shù)傳回父窗口(注意不是opener,而是parent frame),可以在frame中使用parent來(lái)訪問(wèn)父窗口喧兄。例如:parent.document.form1.filename.value = 'Aqing';
6.模態(tài)和非模態(tài)窗口問(wèn)題
說(shuō)明:IE下啊楚,可以通過(guò)showModalDialog和showModelessDialog打開(kāi)模態(tài)和非模態(tài)窗口恭理;Firefox下則不能.
解決方法:直接使用window.open(pageURL,name,paramenters)
方式打開(kāi)新窗口蚯斯。
如果需要將子窗口中的參數(shù)傳遞回父窗口,可以在子窗口中使用window.opener來(lái)訪問(wèn)父窗口遭赂。
例如:var parWin = window.opener; parWin.document.getElementById('Aqing').value = 'Aqing';
7.fiefox與IE的父元素(parentElement)的區(qū)別
IE:obj.parentElement
firefox:obj.parentNode
解決方法:因?yàn)閒irefox與IE都支持DOM茄猫,因此使用obj.parentNode是不錯(cuò)的選擇困肩。
8.document.formName.item(itemName)問(wèn)題
問(wèn)題說(shuō)明:IE下,可以使用document.formName.item('itemName')或者document.formName.elements['elementName'];Firefox下勇劣,只能使用document.formName.elements['elementName'].
解決方法:統(tǒng)一使用document.formName.elements['elementName'].
9.集合類(lèi)對(duì)象問(wèn)題
問(wèn)題說(shuō)明:IE下潭枣,可以使用()或[] 獲取集合類(lèi)的對(duì)象比默;Firefox下,只能使用[ ] 獲取集合對(duì)象盆犁。
解決方法:統(tǒng)一使用[] 獲取集合類(lèi)的對(duì)象命咐。
10.自定義屬性問(wèn)題
問(wèn)題說(shuō)明:IE下,可以使用獲取常規(guī)屬性的方法來(lái)獲取自定義屬性谐岁,也可以使用getAttribute()獲取自定義屬性醋奠;Firefox下,只能使用getAttribute()獲取自定義屬性伊佃。
解決方法:統(tǒng)一通過(guò)getAttribute()獲取自定義屬性窜司。
11.input,type 屬性問(wèn)題
問(wèn)題說(shuō)明:IE下input.type屬性為只讀;但是Firefox下input.type屬性為讀寫(xiě)锭魔。
解決辦法:不修改input.type屬性例证。如果必須要修改迷捧,可以先隱藏原來(lái)的input笙蒙,然后在同樣的位置再插入一個(gè)新的input元素
12.event.srcElement問(wèn)題
問(wèn)題說(shuō)明:IE下轧葛,event對(duì)象有srcElement屬性,但是沒(méi)有target屬性衷笋;Firefox下吝秕,event對(duì)象有target屬性容客,但是沒(méi)有srcElement屬性。
解決方法:使用srcObj = event.srcElement ? event.srcElement:event.target;如果考慮第八條問(wèn)題,就改用myEvent代替event即可士袄。
13.body載入問(wèn)題
問(wèn)題說(shuō)明:Firefox的body對(duì)象在body標(biāo)簽沒(méi)有被瀏覽器完全讀入之前就存在。而IE的body的對(duì)象則必須在body標(biāo)簽被瀏覽器完全讀入之后才存在。
【注】這個(gè)問(wèn)題尚未實(shí)際驗(yàn)證这敬,待驗(yàn)證后再修改。
【注】經(jīng)驗(yàn)證,IE6蝙茶,Opera9以及FireFox2中不存在上述問(wèn)題,單純的JS腳本可以訪問(wèn)腳本之前已經(jīng)載入的所有對(duì)象和元素苞尝,即使這個(gè)元素還沒(méi)有載入完成轴脐。
14,事件委托方法
問(wèn)題說(shuō)明:IE下碴巾,使用document.body.onload = inject;其中function.inject()在這個(gè)之前已被實(shí)現(xiàn)啤月;在Firefox下,使用document.body.onload = inject();
解決方法:統(tǒng)一使用document.body.onload = new Function('inject()');或者document.body.onload = function()
{}
【注意】Function和funtion的區(qū)別杉武。
15.Table操作問(wèn)題
問(wèn)題說(shuō)明:ie,firefox以及其他瀏覽器對(duì)于table標(biāo)簽的操作都各不相同,在ie中不允許對(duì)table和tr的innerHtml賦值,使用js增加一個(gè)tr時(shí)缰趋,使用appendChild方法也不管用评甜。
解決方法://向table追加一個(gè)空行粘舟;
var row = otable.insertRow(-1); var cell = document.createElement('td');cell.innerHTML = "";cell.className = "XXX";row.appendChild(cell);[注]由于我很少使用JS直接操作表格晰骑,這個(gè)問(wèn)題沒(méi)有遇到過(guò)政模,建議使用JS框架集來(lái)操作table,如JQuery。
16彪见,對(duì)象寬高賦值問(wèn)題
問(wèn)題說(shuō)明:FireFox中類(lèi)似obj.style.height = imgObj.height的語(yǔ)句無(wú)效。
CSS
16.cursor:hand VS cursor:pointer;
firefox 不支持hand跷坝,但ie支持pointer
解決方法:統(tǒng)一使用pointer
17.innerText 在IE中能正常工作靠粪,但在FireFox中卻不行
需用textContent.
解決方法:
if(navigator.appName.indexOf('Explorer') > 1){
? ? ?document.getElementById('element').innerText = "my text";
}else{
document.getElemenetById(element).textContent = "my text";
}
18.CSS透明
IE:filter:progid:DXImage Transform.Microsoft.Alpha(style=0,opacity = 60);
FF:opacity:0.6.
opacity 透明畔乙,子元素會(huì)繼承透明屬性。解決方式:1,使用background:rgba(0,0,0,6)//IE8及以下無(wú)效果。2,使用定位,背景色與子元素處于同級(jí)關(guān)系。
19.css中的width和padding
在IE7和FF中的width 寬度不包括padding,在ie6中包括padding
20.FF和IEBOX模型解釋不一致導(dǎo)致相差2px
box.style{width:100;border:1px;}
ie理解為box.width = 100
ff理解為box.width = 100+1*2 = 102 //加上邊框2px
解決方法:div{margin :30 !important;margin:28px已添;}
注意著兩個(gè)margin的順序一定不能寫(xiě)反疏哗,IE不能識(shí)別芽偏!important這個(gè)屬性被碗,但別的瀏覽器可以識(shí)別衣迷。所以在IE下其實(shí)解釋成這樣:div{maring:30px;margin:28px}重復(fù)定義的話按照最后一個(gè)來(lái)執(zhí)行佃迄,所以不可以只寫(xiě)margin:XXpx!important;
21.IE5和IE6的BOX解釋不一致導(dǎo)致相差2px
box.style{width:100;border:1px}
ie理解為box.width = 100 ff理解為box.width = 100 + 1*2 = 102
解決方法:div{margin:30px!important;margin:28px}注意著兩個(gè)margin的順序一定不能寫(xiě)反吼肥。IE不能識(shí)別啤斗!important這個(gè)屬性崔拥,但別的瀏覽器可以識(shí)別慈俯。所以在IE下其實(shí)解釋成這樣:div{margin:30px;margin:28px}重復(fù)定義的話按照最后一個(gè)來(lái)執(zhí)行步鉴,所以不可以只寫(xiě)margin:xxpx !important;
21.IE5和IE6的BOX解釋不一致
IE5下div{width:300px;margin:0 10px 0 10px} div的寬度會(huì)被解釋為300px-10px(左填充)-10px(右填充)骚勘,最終div寬度為280px,而在IE6和其他瀏覽器上的寬度則是300px+10px