JsはIEとFF互換性の問題をまとめています.
10292 ワード
以下はIEでInternet Explorerの代わりに、Mozzia FFの代わりにFFを使用します.
1.document.form.item問題
既存の問題:既存のコードには多くのdocument.formName.item(「iteme Name」)という語句がありますが、FFでは実行できません.
解決方法:document.form Name.elements[element Name]に切り替える.
2.集合類の対象問題
既存の問題:既存のコードの中で、多くの集合類のオブジェクトを使用して()、IEが受け入れられます.FFはできません.
解決方法:下付き演算に切り替える.例えば:document.forms(「formName」)をdocument.forms[formName]に変更します.また、例えば:Dcument.getElementsByName(「inputName」)(1)をdocument.getElements ByName(「input Name」)[1]に変更します.
3.window.イベント
既存の問題:window.eventを使ってFFでは実行できません.
解決方法:FFのイベントはイベントの現場でしか使用できません.この問題はしばらく解決できません.このようにして、元のコード(IEで実行可能):
4.HTMLオブジェクトのIDを対象名とする問題
既存の問題:IEでは、HTMLオブジェクトのIDは、documentの下位オブジェクト変数名として直接使用できます.FFの中ではできません
解決方法:getElementById(「idName」)を対象変数として使用します.
5.idName文字列で対象を取得する問題
既存の問題:IEでは、eval(id Name)を利用してidがアイドルのHTMLオブジェクトとして取得できます.FFではできません.
解決方法:eval(id Name)の代わりにgetElemenntByIdを使用します.
6.変数名と某HTMLオブジェクトIDと同じ問題
既存の問題:FFでは、オブジェクトIDはHTMLオブジェクトの名前ではないので、HTMLオブジェクトIDと同じ変数名を使用できます.IEではできません.
解決方法:変数を宣言する時、一律にvarを加えて、曖昧を回避します.これはIEでも正常に実行できます.また、HTMLオブジェクトIDと同じ変数名を取らない方が良いです.エラーを減らすために.
7.event.xとevent.y問題
既存の問題:IEにおいて、イベントオブジェクトはx,y属性,FF中にない.
解決方法:FFでは、event.xに相当するものはevent.pageXである.但し、event.pageX IEにはありません.だから、event.client Xをevent.xの代わりに採用します.IEにもこの変数があります.event.client Xとevent.pageXは微妙に違っていますが、ほとんどは等価です.
完全に同じなら、ちょっと面倒をかけてもいいです.mX=event.x?event.x:event.pageX;その後、event.xの代わりにmXを使う.
その他:event.layerXはIEとFFの中にあります.具体的な意義の有無はまだテストされていません.
8.frameについて
既存の問題:IEでwindow.testFrameでこのframeを取得できます.FFではだめです.
解決方法:frameの使用において、FFとieの最も重要な違いは、frameラベルに以下の属性が書いてあるということです.
また、FFとieのいずれもwindow.top.document.getElement ById(「frame Id」)を使用してframeタグにアクセスでき、window.top.document.getElement ById(「testFrame」)を介してアクセスできます.src='xx.htm'によりframeの内容を切り替えることもできます.window.top.frame Name.location='xx.htm'を通じてframeの内容を切り替えることもできます.frameとwindowの記述はbsの「windowとframe」文章及び/test/jtest()を参照してください.frame/目次の下のテスト----adun 2004.12.09修正
9.FFでは、自分が定義した属性はget Attribute()で取得しなければならない.
10.FFにはparentElement parement.childrenがなく、parent Node parent Nodes.childNodesの下付きの意味はIEとFFでは異なり、FFはDOM仕様を使い、childNodesは空白のテキストノードを挿入します.一般的にはnode.getElementsByTagName()によってこの問題を回避することができます.html中ノードが欠けている場合、IEとFFのparent Nodeに対する解釈は違っています.例えば、
FF中ノードにはremoveNodeの方法がありません.以下の方法でnode.parent Node.removeChildを使用しなければなりません.
11.const問題
既存の問題:IEではconstキーワードを使用できません.const constVar=32;IEでは文法エラーです.
解決方法:constを使わず、varで代替する.
12.bodyオブジェクト
FFのbodyは、bodyタグがブラウザに完全に読み込まれていない前に存在し、IEはbodyが完全に読み込まれた後に存在します.
13.url encoding jsにurlを書いたらそのまま書く&書かない&例えばvar url='x.jsp?object Name=x&object Event=xxx'fram.action=urlは正常に表示されない可能性があります.パラメータが正しくサーバにアップロードされていないので、エラーパラメータが見つかりません.もちろんtplの例外であれば、tplの中でxml仕様に適合しています.
14.nodeNameとtagNameの問題
問題があります.FFでは全てのノードにnodeName値がありますが、text NodeにはtagName値がありません.IEの中で、nodeNameの使用に問題があるようです.(具体的な状況はテストしていませんが、私のIEは何回も死にました.)
解決方法:tagNameを使用しますが、空かどうかを検査します.
15.元素の属性
IEの下でinput.type属性は読み取り専用ですが、FFの下で変更できます.
16.document.getElementsByName()とdocument.all[name]の問題
既存の問題:IEでは、getElementsByName()、document.all[name]はdiv元素を取得するために使用できません.
17.DOMデータ島の問題
既存の問題:IEでは、タグは特殊な意味を持ち、XML DOMを含んで、HTMLコンポーネントとのデータバインディングを実現できます.FFでは、は未知のタグだけです.また、IEにとっては、はActiveXオブジェクトであることを意味しますが、HTML自体のDOMツリーの下にぶら下がっています.したがって、DOMに深刻な影響を与えます.
解決方法:
IEのデータバインディング機構はJSでシミュレートできますが、面倒臭いので、データバインディング機構を使用しないか、またはこのようなシミュレーションを実現するライブラリを探してください.DOMの互換性をどのように実現するかを議論します.FFでは既知のHTMLマークやXML仕様のマークに関わらず、同じDOMツリーで処理します.したがって、FFは実際にDOMデータ島を使用することができます.IEの中ではDOM documentであり、FFではDOM nodeにすぎない.この違いは普通は危険ではないが、HTMLに対応するための簡単な文法で、FFは簡単な空マークを識別できない小さな詳細がある.とは略字形式であり、FFが認識できなくなります.
1.document.form.item問題
既存の問題:既存のコードには多くのdocument.formName.item(「iteme Name」)という語句がありますが、FFでは実行できません.
解決方法:document.form Name.elements[element Name]に切り替える.
2.集合類の対象問題
既存の問題:既存のコードの中で、多くの集合類のオブジェクトを使用して()、IEが受け入れられます.FFはできません.
解決方法:下付き演算に切り替える.例えば:document.forms(「formName」)をdocument.forms[formName]に変更します.また、例えば:Dcument.getElementsByName(「inputName」)(1)をdocument.getElements ByName(「input Name」)[1]に変更します.
3.window.イベント
既存の問題:window.eventを使ってFFでは実行できません.
解決方法:FFのイベントはイベントの現場でしか使用できません.この問題はしばらく解決できません.このようにして、元のコード(IEで実行可能):
<input type="button" name="someButton" value=" " onclick="javascript:gotoSubmit()"/>
...
<script language="javascript">
function gotoSubmit() {
...
alert(window.event); // use window.event
...
}
</script>
新しいコード(IEとFFで実行可能):<input type="button" name="someButton" value=" " onclick="javascript:gotoSubmit(event)"/>
...
<script language="javascript">
function gotoSubmit(evt) {
evt = evt ? evt :(window.event ? window.event : null);
...
alert(evt); // use evt
...
}
</script>
また、新しいコードの最初の行が変更されない場合、古いコードと同じであれば、まだIEでのみ実行されますが、エラーはありません.したがって、このスキームのtpl部分は古いコードと互換性があります.4.HTMLオブジェクトのIDを対象名とする問題
既存の問題:IEでは、HTMLオブジェクトのIDは、documentの下位オブジェクト変数名として直接使用できます.FFの中ではできません
解決方法:getElementById(「idName」)を対象変数として使用します.
5.idName文字列で対象を取得する問題
既存の問題:IEでは、eval(id Name)を利用してidがアイドルのHTMLオブジェクトとして取得できます.FFではできません.
解決方法:eval(id Name)の代わりにgetElemenntByIdを使用します.
6.変数名と某HTMLオブジェクトIDと同じ問題
既存の問題:FFでは、オブジェクトIDはHTMLオブジェクトの名前ではないので、HTMLオブジェクトIDと同じ変数名を使用できます.IEではできません.
解決方法:変数を宣言する時、一律にvarを加えて、曖昧を回避します.これはIEでも正常に実行できます.また、HTMLオブジェクトIDと同じ変数名を取らない方が良いです.エラーを減らすために.
7.event.xとevent.y問題
既存の問題:IEにおいて、イベントオブジェクトはx,y属性,FF中にない.
解決方法:FFでは、event.xに相当するものはevent.pageXである.但し、event.pageX IEにはありません.だから、event.client Xをevent.xの代わりに採用します.IEにもこの変数があります.event.client Xとevent.pageXは微妙に違っていますが、ほとんどは等価です.
完全に同じなら、ちょっと面倒をかけてもいいです.mX=event.x?event.x:event.pageX;その後、event.xの代わりにmXを使う.
その他:event.layerXはIEとFFの中にあります.具体的な意義の有無はまだテストされていません.
8.frameについて
既存の問題:IEでwindow.testFrameでこのframeを取得できます.FFではだめです.
解決方法:frameの使用において、FFとieの最も重要な違いは、frameラベルに以下の属性が書いてあるということです.
<frame src="xx.htm" id="frameId" name="frameName" />
このframeに対応するwindowオブジェクトはIDまたはnameを通じて訪問できます.FFはnameを通してこのframe対応のwindowオブジェクトにのみアクセスできます.例えば、上記frameタグが最上階のwindowの中のhttmに書いたら、このようにie:window.top.frame Idまたはwindow.top.frame Nameを訪問してこのwindowオブジェクトFFを訪問することができます:このようにwindow.top.frame Nameはこのwindowオブジェクトを訪問します.また、FFとieのいずれもwindow.top.document.getElement ById(「frame Id」)を使用してframeタグにアクセスでき、window.top.document.getElement ById(「testFrame」)を介してアクセスできます.src='xx.htm'によりframeの内容を切り替えることもできます.window.top.frame Name.location='xx.htm'を通じてframeの内容を切り替えることもできます.frameとwindowの記述はbsの「windowとframe」文章及び/test/jtest()を参照してください.frame/目次の下のテスト----adun 2004.12.09修正
9.FFでは、自分が定義した属性はget Attribute()で取得しなければならない.
10.FFにはparentElement parement.childrenがなく、parent Node parent Nodes.childNodesの下付きの意味はIEとFFでは異なり、FFはDOM仕様を使い、childNodesは空白のテキストノードを挿入します.一般的にはnode.getElementsByTagName()によってこの問題を回避することができます.html中ノードが欠けている場合、IEとFFのparent Nodeに対する解釈は違っています.例えば、
<form>
<table>
<input/>
</table>
</form>
FF中のinput.parent Nodeの値はformで、IE中のinput.parent Nodeの値は空ノードです.FF中ノードにはremoveNodeの方法がありません.以下の方法でnode.parent Node.removeChildを使用しなければなりません.
11.const問題
既存の問題:IEではconstキーワードを使用できません.const constVar=32;IEでは文法エラーです.
解決方法:constを使わず、varで代替する.
12.bodyオブジェクト
FFのbodyは、bodyタグがブラウザに完全に読み込まれていない前に存在し、IEはbodyが完全に読み込まれた後に存在します.
13.url encoding jsにurlを書いたらそのまま書く&書かない&例えばvar url='x.jsp?object Name=x&object Event=xxx'fram.action=urlは正常に表示されない可能性があります.パラメータが正しくサーバにアップロードされていないので、エラーパラメータが見つかりません.もちろんtplの例外であれば、tplの中でxml仕様に適合しています.
14.nodeNameとtagNameの問題
問題があります.FFでは全てのノードにnodeName値がありますが、text NodeにはtagName値がありません.IEの中で、nodeNameの使用に問題があるようです.(具体的な状況はテストしていませんが、私のIEは何回も死にました.)
解決方法:tagNameを使用しますが、空かどうかを検査します.
15.元素の属性
IEの下でinput.type属性は読み取り専用ですが、FFの下で変更できます.
16.document.getElementsByName()とdocument.all[name]の問題
既存の問題:IEでは、getElementsByName()、document.all[name]はdiv元素を取得するために使用できません.
17.DOMデータ島の問題
既存の問題:IEでは、
解決方法:
IEのデータバインディング機構はJSでシミュレートできますが、面倒臭いので、データバインディング機構を使用しないか、またはこのようなシミュレーションを実現するライブラリを探してください.DOMの互換性をどのように実現するかを議論します.FFでは既知のHTMLマークやXML仕様のマークに関わらず、同じDOMツリーで処理します.したがって、FFは実際にDOMデータ島を使用することができます.IEの中で
: <xml id="xx"><book><title>xxxx</title><content/><index/></book></xml>,
このうち<content></content><index></index>
しかし、もしXHTMLを使えば、このような問題はないかもしれないと思いますが、まだ試したことがありません.IEの中の<xml>がHTMLのDOM構造に干渉している問題に対して、今の方法は処理が終わったらHTMLのDOMから削除することです.もっと良い解があるかどうか分かりません.