ホームページ  >  記事  >  ウェブフロントエンド  >  IE ブラウザと Firefox ブラウザの互換性の問題と解決策_html/css_WEB-ITnose

IE ブラウザと Firefox ブラウザの互換性の問題と解決策_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:33:101089ブラウズ

誰でもコードを読みやすくするために、Internet Explorer の代わりに IE が使用され、Mozzila Firefox の代わりに MF/FF が使用されます:


1, //window.event
IE : window.event オブジェクトがあります
FF: window.event オブジェクトがありません。
イベントオブジェクトをパラメータとして関数に渡すことができます。 onmousemove=doMouseMove(event) など
解決策: varevent =event || window.event; 例:

<script>function test(event) {var event = event || window.event;//do Something}</script><input type="button" value="click" onclick="test(event)"/><br /><br />

2, //マウスの現在の座標
IE:event.x とevent.y。
FF:event.pageX およびevent.pageY。
ユニバーサル: どちらにも、event.clientX プロパティとevent.clientY プロパティがあります。

//マウスの現在の座標 (プラス、スクロール バーが回転した距離)
IE:event.offsetX およびevent.offsetY。
FF:event.layerX とevent.layerY。

解決策の例:

<script>function test(event) {var event = event || window.event;//or var event = event ? event : window.event;//这两种都可以,也可以用if else(这简写)var x = event.offsetX || event.layerX;var y = event.offsetY || event.layerY;//do Something}</script><div onmousedown="test(event)"></div><br /><br />

3. //event.srcElement の問題
説明: IE では、イベント オブジェクトには srcElement 属性があり、Firefox では、even オブジェクトに target 属性がありません。ただし、srcElement 属性はありません。
解決策: IE ではevent.srcElement、Firefox では
event.target の代わりに obj (obj =event.srcElement ?event.srcElement :event.target;)
を使用してください。イベントの互換性の問題にも注意してください。 。
4 .popularTarget || e.toElement;

5. // ラベルの x および y 座標位置: style.posLeft および style.posTop
IE: はい。
FF: いいえ。
共通: object.offsetLeft と object.offsetTop。

6, //フォーム IE の高さと幅: document.body.offsetWidth および document.body.offsetHeight.注: 現時点では、ページには body タグが必要です。
FF: window.innerWidth と window.innerHegiht、
と document.documentElement.clientWidth と document.documentElement.clientHeight。
共通: document.body.clientWidth と document.body.clientHeight。

7, // イベントを追加
IE: element.attachEvent("onclick", function);.
FF: element.addEventListener("クリック"、関数、true)。
共通: element.onclick=function。 onclick イベントも使用できますが、onclick と上記 2 つのメソッドの効果は異なります。
onclick は 1 つのプロセスのみを実行しますが、attachEvent と addEventListener はプロセスのリスト、つまり複数のプロセスを実行します。

例: element.attachEvent("onclick", func1);

element.attachEvent("onclick", func2) とすると、func1 と func2 の両方が実行されます。


8. //ラベルのカスタム属性

IE: ラベル div1 に属性値が定義されている場合、その値は div1.value および div1["value"] によって取得できます。
FF: div1.value および div1["value"] を使用して取得することはできません。
一般: div1.getAttribute("value")。

9, //document.form.item の問題 IE: 既存の問題: 既存のコードには document.formName.item("itemName") のようなステートメントが多数あり、MF
FF では実行できません。 /IE: document.formName.elements["elementName"]

10. //コレクション/配列クラス オブジェクトの問題

(1) 既存の問題: 既存のコード内の多くのコレクション クラス オブジェクトは () を使用して取得されます。 IE では受け入れられますが、MF では受け入れられません。
(2) 解決策:
添字演算として代わりに [] を使用します。例: document.forms("formName") は document.forms["formName"] に変更されます。

別の例: document.getElementsByName("inputName")(1) を document.getElementsByName("inputName")[1] に変更しました

// HTML オブジェクトの ID をオブジェクトとして使用する問題name
IE では、HTML オブジェクトの ID を document の下位オブジェクトの変数名として直接使用できます。 MFにはありません。
解決策: オブジェクト変数として idName の代わりに getElementById("idName") を使用します。


12. //idName 文字列を使用したオブジェクトの取得に関する問題

IE では、eval(idName) を使用して ID idName を持つ HTML オブジェクトを取得できますが、MF ではできません。 解決策: eval(idName) の代わりに getElementById(idName) を使用します。

13. //変数名がHTMLオブジェクトのIDと同じである問題

MFではHTMLオブジェクトの名前としてオブジェクトIDを使用しないため、同じ変数名を使用できますHTML オブジェクト ID として使用されますが、IE では使用されません。 解決策: 変数を宣言するときは、あいまいさを避けるために常に var を追加して、IE でも正常に実行できるようにします。また、エラーを減らすために、HTML オブジェクト ID と同じ変数名を使用しないことをお勧めします。

14、//document.getElementsByName() 和 document.all[name] 的问题
现有问题:在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素。
(是否还有其它不能取的元素还不知道)。

 

15、//document.all
Firefox可以兼容document.all, 但会生成一条警告。可以用getElementById("*")
或者 getElementByTagName("*")来代替,不过对于document.all.length等属性,则完全不兼容。

 

16、//input.type属性问题
说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写

 

17、//window.location.href问题
说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,
只能使用window.location
解决方法:使用window.location来代替window.location.href

 

18、//模态和非模态窗口问题
说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能
解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。
如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口.
例如:var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";

 

19、//body问题
Firefox的body在body标签没有被浏览器完全读入之前就存在;而IE的body则必须在body标签被浏览器完全载入之后才存在。

 

20、//事件委托方法
IE:document.body.onload = inject; //Function inject()在这之前已被实现
FF:document.body.onload = inject();

 

21、//firefox与IE的父元素(parentElement)的区别
IE:obj.parentElement
FF:obj.parentNode
解决方法: 因为FF与IE都支持DOM,因此使用obj.parentNode是不错选择

 

22、//innerText在IE中能正常工作,但是innerText在FireFox中却不行.

需用textContent

//FireFox中设置HTML标签的style时,所有位置性和字体尺寸的值必须后跟px。这个ie也是支持的。

 

23、//父节点、子节点和删除节点
IE:parentElement、parement.children,element.romoveNode(true)。
FF:parentNode、parentNode.childNodes,node.parentNode.removeChild(node)。


24、//对select的options集合操作
枚举元素除了[]外,SelectName.options.item()也是可以的, 另外SelectName.options.length,
SelectName.options.add/remove都可以在两种浏览器上使用。
注意在add后赋值元素,否则会失败
动态删除select中的所有options:
document.getElementById("ddlResourceType").options.length=0;
动态删除select中的某一项option:
document.getElementById("ddlResourceType").options.remove(indx);
动态添加select中的项option:
document.getElementById("ddlResourceType").options.add(new Option(text,value));
IE FF 动态删除通用方法:
document.getElementById("ddlResourceType").options[indx] = null;

 

25、//捕获事件
曾经遇到的问题:
FF没有setCapture()、releaseCapture()方法
IE中的解决方法:
obj.setCapture();
obj.releaseCapture();
FF火狐中的解决办法:

window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);if (!window.captureEvents) {o.setCapture();}else {window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);}if (!window.captureEvents) {o.releaseCapture();}else {window.releaseEvents(Event.MOUSEMOVE|Event.MOUSEUP);}<br /><br /><strong>26、//禁止选取网页内容</strong>

FF需要用CSS禁止,IE用JS禁止
解决方法:
IE: obj.onselectstart = function() {return false;}
FF: -moz-user-select:none;


27、//画图
IE:VML
FF:SVG

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。