私たちが議論しているトピックは CSS Web ページのレイアウトです。誰もが最も悩ましい問題はブラウザーの互換性です。52CSS.com ではこの分野に関する多くの知識が紹介されていますが、今日の記事では 20 の CSS をリストします。 - JavaScript と IE および Firefox の JavaScript の 3 つの違い 皆さんの学習に役立つことを願っています。
1. document.formName.item("itemName") の問題問題の説明: IE では document.formName.item("itemName") または document.formName.elements ["elementName"] を使用できますが、Firefox では document.formName.elements["elementName"] のみを使用できます。 。
解決策: document.formName.elements["elementName"] を一律に使用します。
2. コレクション オブジェクトに関する問題<br /> 問題の説明: IE では () または [] を使用してコレクション オブジェクトを取得できますが、Firefox では [ ] を使用してのみコレクション オブジェクトを取得できます。
解決策: コレクション クラス オブジェクトを取得するには、[] を一律に使用します。
3. カスタム属性の問題<br /> 問題の説明: IE では、通常の属性を取得するメソッドを使用してカスタム属性を取得できますが、Firefox では getAttribute() のみを使用できます。 ) を使用してカスタム プロパティを取得します。
解決策: getAttribute() を通じてカスタム属性を均一に取得します。
4. eval("idName") の問題<br /> 問題の説明: IE では eval("idName") または getElementById("idName") を使用して ID idName の HTML オブジェクトを取得できます。Firefox では次のことができます。 ID idName を持つ HTML オブジェクトを取得するには、getElementById ("idName") のみを使用してください。
解決策: getElementById("idName") を一律に使用して、ID が idName である HTML オブジェクトを取得します。
5. 変数名が HTML オブジェクトの ID と同じである問題<br /> 問題の説明: IE では、HTML オブジェクトの ID をドキュメントの下位オブジェクトの変数名として直接使用できますが、ただし、Firefox では使用できません。Firefox では HTML オブジェクトで使用できます。IE では同じ ID の変数名を使用できません。
回避策: document.idName の代わりに document.getElementById("idName") を使用します。エラーを減らすために、同じ HTML オブジェクト ID を持つ変数名を使用しないことをお勧めします。変数を宣言するときは、あいまいさを避けるために常に var キーワードを追加してください。
6. Const の問題<br /> 問題の説明: Firefox では定数の定義に const キーワードまたは var キーワードを使用できますが、IE では定数の定義に var キーワードのみを使用できます。
解決策: 定数を定義するには、一律に var キーワードを使用します。
7. input.type 属性の問題<br /> 問題の説明: IE の input.type 属性は読み取り専用ですが、Firefox の input.type 属性は読み書き可能です。
解決策: input.type 属性を変更しないでください。変更する必要がある場合は、最初に元の入力を非表示にしてから、同じ位置に新しい入力要素を挿入します。
8. Window.event の問題<br /> 問題の説明: window.event は IE でのみ実行でき、Firefox では実行できません。これは、Firefox のイベントがイベントが発生する場面でしか使用できないためです。
解決策: イベントが発生する関数にイベント パラメーターを追加し、関数本体で var myEvent = evt?evt:(window.event?window.event:null) を使用します (仮パラメーターが evt であると仮定します)。
例:
ソースコードの例[www.downcodes.com] <input type="button" onclick="doSomething(event)"/>
<スクリプト言語="javascript">
関数 doSomething(evt) {
var myEvent = evt?evt:(window.event?window.event:null)
...
}
9.event.x とevent.y の問題<br /> 問題の説明: IE では偶数オブジェクトに x 属性と y 属性がありますが、pageX 属性と pageY 属性はありません。Firefox では偶数オブジェクトに pageX 属性と pageY 属性がありますが、 x、y 属性はありません。
解決策: var myX = イベント.x ? イベント.pageX ? イベント.y:event.pageY;
質問 8 を考慮する場合は、event の代わりに myEvent を使用してください。
10. Event.srcElement の問題<br /> 問題の説明: IE では、even オブジェクトには srcElement 属性がありますが、target 属性がありません。Firefox では、even オブジェクトには target 属性がありますが、srcElement 属性がありません。
解決策: srcObj =event.srcElement?event.srcElement:event.target; を使用します。
質問 8 を考慮する場合は、event の代わりに myEvent を使用してください。
11. Window.location.href の問題<br /> 問題の説明: IE または Firefox2.0.x では window.location または window.location.href を使用できますが、Firefox1.5.x では window のみを使用できます。位置 。
回避策: window.location.href の代わりに window.location を使用します。もちろん、 location.replace() メソッドの使用を検討することもできます。
12. モーダルおよび非モーダル ウィンドウの問題<br /> 問題の説明: IE では、showModalDialog および showModelessDialog を通じてモーダル ウィンドウおよび非モーダル ウィンドウを開くことができますが、Firefox ではこれを行うことができません。
解決策: window.open(pageURL,name,parameters) を直接使用して、新しいウィンドウを開きます。
子ウィンドウのパラメータを親ウィンドウに渡す必要がある場合は、子ウィンドウで window.opener を使用して親ウィンドウにアクセスできます。親ウィンドウで子ウィンドウを制御する必要がある場合は、var subWindow = window.open(pageURL,name,parameters); を使用して、新しく開かれたウィンドウ オブジェクトを取得します。
13. フレームと iframe の問題<br /> 次のフレームを例に挙げます。
<frame src="http://www.downcodes.com/123.html" id="frameId" name="フレーム名" />
(1) フレーム オブジェクト IE にアクセスします。window.frameId または window.frameName を使用してフレーム オブジェクトにアクセスします。
Firefox: このフレーム オブジェクトにアクセスするには、window.frameName を使用します。
解決策: このフレーム オブジェクトにアクセスするには、一律に window.document.getElementById("frameId") を使用します。
(2) フレームのコンテンツを切り替えるには、IE と Firefox の両方で window.document.getElementById("frameId").src = "52css.com.html" または window.frameName.location = "52css.com.html" を使用できます。フレームの内容。
フレーム内のパラメータを親ウィンドウに戻す必要がある場合は、フレーム内でparentキーワードを使用して親ウィンドウにアクセスできます。
14. ボディの読み込みの問題<br /> 問題の説明: Firefox の body オブジェクトは、ブラウザによって body タグが完全に読み取られる前に存在しますが、IE の body オブジェクトは、body タグがブラウザによって完全に読み取られた後に読み込まれる必要があります。
【注意】この問題は実際に検証されていないため、検証後に修正します。
[注意] IE6、Opera9、FireFox2 では上記の問題が発生しないことが確認されています。単純な JS スクリプトは、要素がまだ読み込まれていない場合でも、スクリプトより前に読み込まれているすべてのオブジェクトと要素にアクセスできます。
15. イベント委任メソッド<br /> 問題の説明: IE では、関数 inject() が以前に実装されていた場合、 document.body.onload = inject; を使用します。
解決策: document.body.onload=new Function('inject()'); または document.body.onload = function(){/* を使用します。コードは次のとおりです */}
【注意】FunctionとFunctionの違い
16. アクセスされる親要素の違い<br /> 問題の説明: IE では obj.parentElement または obj.parentNode を使用して obj の親ノードにアクセスしますが、Firefox では obj.parentNode を使用して obj の親ノードにアクセスします。
解決策: Firefox と IE はどちらも DOM をサポートしているため、obj.parentNode を使用して obj の親ノードにアクセスします。
17. カーソル:ハンド VS カーソル:ポインタ
問題の説明: Firefox はハンドをサポートしていませんが、IE はポインターをサポートしています。どちらもハンド命令です。
解決策: ポインターを一律に使用します。
18. innerText の問題。
問題の説明: innerText は IE では正常に動作しますが、innerText は FireFox では動作しません。
解決策: IE 以外のブラウザでは innerText の代わりに textContent を使用します。
例:
ソースコードの例[www.downcodes.com] if(navigator.appName.indexOf("エクスプローラー") >-1){
document.getElementById('element').innerText = "私のテキスト";
} それ以外{
document.getElementById('element').textContent = "私のテキスト";
}
[注意] innerHTML は、IE や Firefox などのブラウザでも同時にサポートされています。outerHTML などの他のブラウザは、IE でのみサポートされているため、使用しないことをお勧めします。
19. オブジェクトの幅と高さの割り当ての問題<br /> 問題の説明: FireFox の obj.style.height = imgObj.height に類似したステートメントは無効です。
解決策: obj.style.height = imgObj.height + 'px'; を一律に使用します。
20. テーブル操作の問題<br /> 問題の説明: IE、Firefox、およびその他のブラウザでは、table タグに対する操作が異なります。IE では、js を使用して tr を追加するときに、innerHTML の割り当てが許可されません。 appendChild メソッドも機能しません。
解決:
ソースコードの例[www.downcodes.com] // テーブルに空の行を追加します。
var row = otable.insertRow(-1);
var cell = document.createElement("td");
cell.innerHTML = "";
cell.className = "XXXX";
row.appendChild(セル);
[注意] 私はJSを使ってテーブルを直接操作することはほとんどないので、この問題に遭遇したことはありません。テーブルの操作にはJQueryなどのJSフレームワークの利用を推奨します。
21. ul, olリストのインデント問題<br /> ul, olなどのリストのインデントをなくす場合、スタイルは list-style:none;margin:0px;padding:0px; のように書く必要があります。
margin 属性は IE で有効であり、padding 属性は FireFox で有効です。 ←この文は表現が間違っています、詳しくは↓をご覧ください
【注意】この問題は実際に検証されていないため、検証後に修正します。
[注] IE では、margin:0px を設定すると、リストの上下左右のインデント、空白、リスト番号またはドットが削除されることが確認されています。パディングの設定は、Firefox のスタイルには影響しません。 margin:0px を設定すると、上下のインデントのみを削除できます。padding:0px を設定した後は、左右のインデントのみを削除できます。リストの番号またはドットを削除するには、list-style:none も設定する必要があります。つまり、IE では最終的な効果を得るために margin:0px のみを設定できますが、Firefox では最終的な効果を得るために margin:0px、padding:0px、list-style:none を同時に設定する必要があります。
22. CSS の透明度の問題IE: filter:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=60)。
FF:不透明度:0.6。
【注意】両方書いて下にopacity属性を入れるのがベストです。
23. CSS の角丸の問題IE: IE7 より前のバージョンは角丸をサポートしていません。
FF: -moz-border-radius:4px、または -moz-border-radius-topleft:4px;-moz-border- radius-topright:4px;-moz-border-radius-bottomleft:4px;-moz-border-半径-bottomright:4px;。
[注意] 角丸の問題は CSS の古典的な問題であり、角丸設定には JQuery フレーム セットを使用し、これらの複雑な問題は他の人に任せることをお勧めします。
CSSには問題が多すぎて、同じCSS定義でもページ規格が異なれば表示効果も異なります。詳細については、52CSS.com の記事を参照してください。開発に沿った提案としては、IE などの主流ブラウザを考慮して、テーブルの使用を減らし、CSS 定義をできる限り標準 DOM に基づいてページを作成する必要があります。 、Firefox、Opera。ところで、多くの場合、FF と Opera の CSS 解釈標準は CSS 標準に近く、より規範的です。