以下では、Internet Explorer の代わりに IE が使用され、Mozzila Firefox
1 の代わりに MF が使用されます。 document.form.item の問題
(1)既存の問題点:
既存のコードには document.formName.item("itemName") のようなステートメントが多数ありますが、これらは MF では実行できません。
(2)解決策:
代わりに document.formName.elements["elementName"] を使用してください
(3)その他
2
2. コレクションオブジェクトの問題を
参照してください。
(1)既存の問題点:
既存のコード内の多くのコレクション クラス オブジェクトは、アクセスするときに () を使用しますが、IE はこれを受け入れることができますが、MF は受け入れられません。
(2)解決策:
代わりに添え字として [] を使用してください。例: document.forms("formName") は document.forms["formName"] に変更されます。
別の例: document.getElementsByName("inputName")(1) は document.getElementsByName("inputName")[1] に変更されます。
(3) その他
3. window.event
(1)既存の問題点:
window.eventを使用したMFで動作しない
(2)解決策:
MFのイベントはイベントが発生する場面でしか使えず、この問題はまだ解決されていません。次のように変更できます。
元のコード (IE で実行可能):
<input type="button" name="someButton" value="送信" onclick="javascript:gotoSubmit()"/>
...
<スクリプト言語="javascript">
関数 gotoSubmit() {
...
alert(window.event); // window.eventを使用します。
...
}
</script>
新しいコード (IE および MF で実行可能):
<input type="button" name="someButton" value="Submit" onclick="javascript:gotoSubmit(event)"/>
...
<スクリプト言語="javascript">
関数 gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);
...
アラート(evt); // evtを使用します。
...
}
</script>
さらに、新しいコードの最初の行が変更されず、古いコードと同じである場合 (つまり、gotoSubmit 呼び出しでパラメーターが指定されていない場合)、コードは引き続き IE でのみ実行されますが、エラーは発生しません。したがって、このソリューションの tpl 部分は依然として古いコードと互換性があります。
4. HTMLオブジェクトのIDをオブジェクト名として使用する問題
(1)既存の問題点
IE では、HTML オブジェクトの ID をドキュメントの下位オブジェクトの変数名として直接使用できます。 MFでは無理。
(2)解決策
オブジェクト変数として idName の代わりに getElementById("idName") を使用します。
5. idName 文字列を使用したオブジェクトの取得に関する問題
(1)既存の問題点
IE では、eval(idName) を使用して ID idName を持つ HTML オブジェクトを取得できますが、MF ではできません。
(2)解決策
eval(idName) の代わりに getElementById(idName) を使用してください。
6. 変数名がHTMLオブジェクトのIDと同じである問題
(1)既存の問題点
MF では、オブジェクト ID が HTML オブジェクトの名前として使用されないため、HTML オブジェクト ID と同じ変数名を使用できますが、IE では使用できません。
(2)解決策
変数を宣言するときは、IE で正常に実行できるように、あいまいさを避けるために常に var を追加してください。
また、エラーを減らすために、HTML オブジェクト ID と同じ変数名を使用しないことをお勧めします。
(3)その他
質問 4 を参照してください
。 7. Event.x およびevent.y の問題
(1)既存の問題点
IE では、イベント オブジェクトには x、y 属性がありますが、MF にはありません。
(2)解決策
MF では、event.x に相当するのは、event.pageX です。ただし、event.pageX は IE では使用できません。
したがって、event.x の代わりに、event.clientX が使用されます。この変数はIEにも存在します。
events.clientX と events.pageX (ページ全体にスクロール バーがある場合) には微妙な違いがありますが、ほとんどの場合は同等です。
まったく同じにしたい場合は、もう少し手間をかけることができます。
mX = イベント.x ? イベント.x : イベント.ページX;
次に、event.x の代わりに mX を使用します。
(3)その他
event.layerX は IE と MF の両方に存在しますが、具体的な意味が異なるかどうかはまだテストされていません。
8. フレームについて
(1)既存の問題点
IE では、window.testFrame を使用してフレームを取得できますが、mf では取得できません。
(2)解決策
フレームの使用における mf と ie の主な違いは次のとおりです。
Frameタグに以下の属性を記述した場合:
<frame src="xx.htm" id="frameId" name="フレーム名" />
次に、ie は id または名前を介してこのフレームに対応するウィンドウ オブジェクトにアクセスできますが、mf は名前を介してのみこのフレームに対応するウィンドウ オブジェクトにアクセスできます。たとえば、上記のフレーム タグがトップ ウィンドウ内の htm に記述されている場合、次のようになります。このようにアクセスできます
例: このウィンドウ オブジェクトにアクセスするには、window.top.frameId または window.top.frameName
mf: このウィンドウ オブジェクトは、window.top.frameName を通じてのみアクセスできます。
また、mf と ie の両方で window.top.document.getElementById("frameId") を使用して、フレーム タグと window.top.document にアクセスできます。 . getElementById("testFrame").src = 'xx.htm' を使用してフレームのコンテンツを切り替えることもできます。 window.top.frameName.location = 'xx.htm' を使用してフレームのコンテンツを切り替えることもできます。フレームとウィンドウの説明については、bbs の「ウィンドウとフレーム」記事と /test/js/test_frame/ ディレクトリ内のテストを参照してください。
----adun 2004.12.09 修正
9. mfでは自分で定義した属性をgetAttribute()で取得する必要がある
10. mf にはparentElement parement.children はありませんが、使用します
親ノードparentNode.childNode
IEとMFではchildNodesの添字の意味が異なり、MFではDOM仕様となっており、childNodesには空のテキストノードが挿入されます。
通常、この問題は、node.getElementsByTagName() を使用して回避できます。
HTML でノードが欠落している場合、IE と MF ではparentNode の解釈が異なります。たとえば、
<フォーム>
<テーブル>
<入力/>
</テーブル>
</form>
MF の input.parentNode の値は form ですが、IE の input.parentNode の値は空のノードです。MF
のノードには、removeNode メソッドがありません。次のメソッド、node.parentNode.removeChild(node) を使用する必要があります
。 .const の問題
(1)既存の問題点:
const キーワードは IE では使用できません。 const constVar = 32; など。これは IE の構文エラーです。
(2)解決策:
const を使用せず、代わりに var を使用してください。
12. ボディオブジェクト
MF の本文は、ブラウザーが本文タグを完全に読み取る前に存在しますが、IE は本文が完全に読み取られた後に存在する必要があります。
13. URL エンコード。
js で URL を記述する場合は、たとえば var url = 'xx.jsp?objectName=xx&objectEvent=xxx'; のように記述します。
frm.action = url の場合、URL が正常に表示されず、パラメーターがサーバーに正しく送信されない可能性が高くなります。もちろん、サーバーはパラメーターが見つからないというエラーを報告します。 tpl 内にある場合は、tpl は XML 仕様に準拠しており、要件 & は & として記述されるためです。
通常、MF は js 内の & を認識できません。
14.nodeName と tagName の問題
(1)既存の問題点:
MF では、すべてのノードに nodeName 値がありますが、textNode には tagName 値がありません。 IEでは、nodeNameの使用は次のようになります。
問題があります (具体的な状況をテストしていませんが、IE が何度か停止しました)。
(2)解決策:
tagName を使用しますが、それが空かどうかを検出する必要があります。
15. 要素の属性
input.type 属性は IE では読み取り専用ですが、MF では変更できます。
16. document.getElementsByName() と document.all[name] の問題
(1)既存の問題点:
IEではgetElementsByName()やdocument.all[name]ではdiv要素を取得できません(他にも取得できない要素があるかは不明)。