發新話題
打印

[轉貼] IE和Firefox在JavaScript方面的兼容性

[轉貼] IE和Firefox在JavaScript方面的兼容性

1.document.formName.item("itemName") 問題
: n  C; l, }/ f$ Q  V) N# P$ |* |0 e& A9 X6 w: n6 b
說明:IE 下,可以使用document.formName.item("itemName")或document.formName.elements ["elementName"];Firefox下,只能使用document.formName.elements["elementName"].0 c+ z3 l& J" {2 r
解決方法:統一使用document.formName.elements["elementName"]. Text1:
( |' F" v7 E2 R( [+ ?2 }6 vdocument.formName.item("itemName")7 V: j5 v" X% I) s( {
document.formName.elements["elementName"]' T1 V5 G; m7 `3 I7 ]: ]

. }$ Z/ `8 R, Z: Q* n6 L1 f/ K3 k-------------------------------------------------, r% ], ~% k- T7 S0 T6 ?$ E
2.集合類對象問題6 ^- G# S! J0 O3 Q/ x
( z+ Y- v3 i/ D& m/ T! c
說明:IE下,可以使用()或[]獲取集合類對象;Firefox下,只能使用[]獲取集合類對象.
8 Y# X7 Z- r  u; k5 Q  W* J解決方法:統一使用[]獲取集合類對象.6 {9 N6 V0 n8 M0 [+ y
Text2:- m& P8 R% e5 n) p' K7 {
document.forms("formName")' c+ p' i/ ~2 H$ y* y' e
document.forms["formName"]: ?1 r/ [- j# u
; c$ M, b4 F) _
Text3:
& T2 R; @" d( l7 m) @document.getElementsByName("inputName")(0)
; u* s- d! u* b2 j; Q4 Pdocument.getElementsByName("inputName")[0]
- Q% X" f$ O  o# o: g' A
$ |1 p) n/ }* `- P9 @! w-------------------------------------------------' a+ ]" b$ r) K, `( [  [) Y. W
3.自定義屬性問題
+ j9 \! C) w) f8 x* T- ^2 E( e
& D" n, i& r+ w7 L4 W) v) K說明:IE下,可以使用獲取常規屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性;Firefox下,只能使用getAttribute()獲取自定義屬性.
8 y$ u0 z7 B% e/ C, I( g5 D2 n6 k解決方法:統一通過getAttribute()獲取自定義屬性.! [9 Y& [) j  D2 K( Q
Text4:/ G  L6 S8 E" z& [, R% o" v
直接獲取自定義屬性的值0 {7 b# C+ `0 S- }
通過getAttribute()獲取自定義屬性的值0 Q7 B- Y5 y  Q8 \. A; @$ X
' g* ?- K& z8 I& \
-------------------------------------------------
5 A# w/ o: z, v! D. ^4.eval("idName")問題$ C1 ^, s8 r) F- L2 X7 _7 P

5 c- E. |8 L; z  d* r說明:IE下,,可以使用eval("idName")或getElementById("idName")來取得id為idName的HTML對象;Firefox下只能使用getElementById("idName")來取得id為idName的HTML對象./ Y# \" L7 A" T9 A  o2 N5 N
解決方法:統一用getElementById("idName")來取得id為idName的HTML對象.! v$ S. K; E3 D
Text5:/ ]& T8 w$ d& J* ]( m
eval("idName")
6 L, T. o+ N/ Q) ?. E" q' M. jdocument.getElementById("itemId")
+ e5 B( v! s9 @9 ~# \1 J: M9 i
7 u1 b. P9 ]  V) c$ Z4 ?-------------------------------------------------2 \9 Y, L+ p' E/ D+ O; E% k
5.變量名與某HTML對象ID相同的問題
" E7 O2 M) v8 k& U) w' L6 F2 H: j& n$ |5 d' \' R7 }: F7 W
說明:IE下,HTML對象的ID可以作為document的下屬對象變量名直接使用;Firefox下則不能.Firefox下,可以使用與HTML對象ID相同的變量名;IE下則不能。
7 w) W* Q9 X6 N2 {' K解決方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML對象ID相同的變量名,以減少錯誤;在聲明變量時,一律加上var,以避免歧義.8 U( u3 C6 c. }" J9 ~3 I) x
8 s2 O6 L% U5 b9 q1 r7 {9 U2 |
-------------------------------------------------5 d0 H- W/ H+ k
6.const問題
, \1 O: l( L/ {. Y1 j" z" W5 @2 a, H0 Q( W4 S# q- G
說明:Firefox下,可以使用const關鍵字或var關鍵字來定義常量;IE下,只能使用var關鍵字來定義常量., t3 y9 g  j( i( i
解決方法:統一使用var關鍵字來定義常量.
* H6 [* x) V' q6 }+ }3 G3 k
; D1 o4 t+ N' n( B- L-------------------------------------------------5 {" A4 f, a1 o; }. _: K
7.input.type屬性問題
9 I% }% G3 ]6 V6 ?: J/ d+ M6 w
' W  V2 q' v8 m3 K說明:IE下input.type屬性為只讀;但是Firefox下input.type屬性為讀寫.+ y+ C- s+ Y9 o  A& P
) n7 s7 Y# Y2 c* g: p
-------------------------------------------------
& N* o9 \* {9 u+ Y; T8.window.event問題
% w. G: ^; `  p4 o, \1 s/ ^7 m! Q- m* X$ S8 T# |2 ?8 @
說明:window.event只能在IE下運行,而不能在Firefox下運行,這是因為Firefox的event只能在事件發生的現場使用.6 G$ u: Y: [  Y( {
解決方法:
( s2 L" o; V$ A" KIE:) U) q) e; _; \% T0 i4 f2 M
<input name="Button8_1" type="button" value="IE" />
# \3 E6 q+ m% d. K/ Q6 O* T4 Q...# W7 C4 I! w9 _
<script language="javascript">) ?" A: c1 v& Y
function gotoSubmit8_1() {, r* g; H7 U& h- d9 F- u# m0 B2 [/ t
...
; c  M1 ^  ~+ ]7 S  falert(window.event); //use window.event9 D+ ]/ f! I1 f& N& u9 s
...
; Q+ p* s% K8 f+ G( U4 B. e}/ f9 I7 z  X$ b' ?' N  A# W
</script>- R" r# K) N! Q$ k
IE&Firefox:
7 L! V1 f5 ~1 _: ^, J<input name="Button8_2" type="button" value="IE" />6 F0 E6 Z" n8 z+ n! b
...) h0 Q$ J5 K% R! m
<script language="javascript">- m' l  A$ i- C* u( m1 k, T4 Y- x
function gotoSubmit8_2(evt) {
0 B0 O) M- C& x# ?...
* k7 u' B6 T) Levt=evt?evt:(window.event?window.event:null);( \) w0 {) W* m( r& c' m3 A5 I
alert(evt); //use evt9 k5 G7 K8 D3 l% {- q- Y4 D2 @0 X) L- L
...
9 K9 v* J, V  Y- v; `) w% y* l}
' M- o2 b; L, `* U1 b5 ^</script>; a3 ?. ?6 `! z2 ?

" o1 n: ]# F5 s! j-------------------------------------------------/ e0 f, u- B- f2 t4 {; M
9.event.x與event.y問題- F. a$ ?3 a" u& Z8 a

9 q7 W+ ~0 K" R! E  c% u說明:IE下,even對象有x,y屬性,但是沒有pageX,pageY屬性;Firefox下,even對象有pageX,pageY屬性,但是沒有x,y屬性.
3 [: Q4 W; m: ^* _" c解決方法:使用mX(mX = event.x ? event.x : event.pageX;)來代替IE下的event.x或者Firefox下的event.pageX.
+ j: y. x! v7 X. \7 [3 e( C
; H5 T4 K$ t/ p  ]: A6 x-------------------------------------------------
5 k. K/ F# X5 i$ _4 F! M4 ^' Q% g0 J10.event.srcElement問題
( R- y4 T  P$ i' X' H: \
" G- C6 Y& S7 x$ T/ h9 _% d9 k說明:IE下,even對象有srcElement屬性,但是沒有target屬性;Firefox下,even對象有target屬性,但是沒有srcElement屬性.  G5 T' f( B' h: r6 y, z
解決方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)來代替IE下的event.srcElement或者Firefox下的event.target.
, l  a6 H' i" F" [( {4 Y
; c2 t4 W  j' p# _5 y+ I8 Y-------------------------------------------------
/ j; J" I& u$ b! G2 F: P8 e. ?( i11.window.location.href問題
% D) C4 A" F1 R1 Z8 h: N8 |# v, E6 t
7 g5 j: E/ e# U2 Z說明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location.
; M3 K& v; [/ l/ K- b. Q解決方法:使用window.location來代替window.location.href.' h+ X8 v$ ]- S& J) r
7 Q# o! Q2 z- A  Q, w0 @2 @3 ~/ g( ]
-------------------------------------------------
; h! e3 t/ C/ j; |% O+ u+ \% L& ?/ R1 B( \* m
12.模態和非模態窗口問題6 o! l# d# p* I
; ?# [7 x/ B& D& M* R
說明:IE下,可以通過showModalDialog和showModelessDialog打開模態和非模態窗口;Firefox下則不能.
: t& D7 }) T" ?  o解決方法:直接使用window.open(pageURL,name,parameters)方式打開新窗口。
# G/ v! p9 t% `2 t  B0 v6 V1 O; t% _2 S& _
如果需要將子窗口中的參數傳遞迴父窗口,可以在子窗口中使用window.opener來訪問父窗口. 例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";
6 K2 |  a' d5 d/ J) I9 p
" U. t  T, i' F8 n% V, O6 p-------------------------------------------------
4 `) V6 R# j7 ]: j1 m13.frame問題  }- B# L  f8 p' y& R! ?

' a0 V. g1 T% ]4 l8 g. e以下面的frame為例:
4 O0 t" ^; D# C<frame src="xxx.html" id="frameId" name="frameName" />
7 m- @9 g' \& i# ?1 o5 c  u
0 }' A1 ~) _: n4 ]: ~, K(1)訪問frame對象:2 |6 |' h# |% S; U* k  h3 W% j+ j
IE:使用window.frameId或者window.frameName來訪問這個frame對象.
- J! {: b/ \" L! AFirefox:只能使用window.frameName來訪問這個frame對象.
/ }" O  e& l& W另外,在IE和Firefox中都可以使用window.document.getElementById("frameId")來訪問這個frame對象.  U) e0 N- @3 V, R1 q; |
$ s( b' R6 x' H+ f
(2)切換frame內容:
' R  V  v1 w9 o# N6 I8 T) V在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"來切換frame的內容.) k% H3 H- C7 t3 o7 D4 q4 {

. w- t9 u* X: M: R* `. d, @如果需要將frame中的參數傳回父窗口,可以在frme中使用parent來訪問父窗口。例如:parent.document.form1.filename.value="Aqing";
5 U0 P! I3 U; z( d
9 ]" B5 l& n) C" }2 z4 W. ?9 `! ?! y3 D-------------------------------------------------1 `) ~4 h4 o5 ]. d/ K! p% z$ k
14.body問題) Z  T4 W& A2 D
# e6 O% r4 w8 R" G9 W* X/ O
Firefox的body在body標籤沒有被瀏覽器完全讀入之前就存在;而IE的body則必須在body標籤被瀏覽器完全讀入之後才存在.$ P5 z* L, c, @* ^$ ?8 H( K

9 Y! j, N/ F" V; ]- u( K+ C例如:
& c( L; |7 ~7 a% _, ]: IFirefox:
; h0 D, A0 y1 s; `<body>
( G; S8 M+ f9 e: Z<script type="text/javascript">/ V4 q0 ~6 ~7 h  c; E. d
document.body.onclick = function(evt){! H3 C" X3 k6 P9 U2 Z; r9 \
evt = evt, P3 ^2 W% T3 e, F$ V' A$ R7 O3 }
window.event;
1 `9 _# V5 s/ p  m( ualert(evt);
/ o* `" p9 B* A/ ?}6 g# C( r3 C! B
</script>
; ~$ k, V2 r9 m+ `* H</body>
' @( c& L" q( \& q8 G) aIE&Firefox:
5 U7 T5 \' g! s( Z# U. {% I5 j<body>
, l2 }: V9 p" o3 i8 P& O) j6 D</body>
1 H+ L) x" `( `! i4 q: [% j# j" u<script type="text/javascript">
, @3 P& p2 U& q  ~' cdocument.body.onclick = function(evt){! s" @5 k0 Y; h3 T
evt = evt
* z" E* l& Y7 @" ~; cwindow.event;4 |: o9 F; B1 v$ h- T
alert(evt);
! C, n' ]: V, M  k' l4 f}; x# X4 N- p  L8 b4 n
</script>
The more you learn, the more you know,
The more you know, the more you forget.
The more you forget, the less you know.
So.... why bother to learn.

Host your Web site with StartLogic

Sign up with Bluehost

TOP

己經是你的親筆作, 對嗎?:onion67
├ 1.文章內附資源只為測試網路速度之用!請於下載完後24小時內刪除!請尊重智慧財產權。
├ 2.如作為其它用途,皆與本論壇及作者無關。


TOP

[轉貼] IE和Firefox在JavaScript方面的兼容性+ E" i4 {; ], F- t* M
:onion63
希望以後有更好的分享
 請大家多支持這裡

TOP

oh....
9 p. L8 L* y* Q% q9 h( B仲以為係你ge心得tim:onion70
├ 1.文章內附資源只為測試網路速度之用!請於下載完後24小時內刪除!請尊重智慧財產權。
├ 2.如作為其它用途,皆與本論壇及作者無關。


TOP

發新話題
eXTReMe Tracker