ホームページ >ウェブフロントエンド >htmlチュートリアル >IE ブラウザと Firefox ブラウザの互換性の問題と解決策_html/css_WEB-ITnose
誰でもコードを読みやすくするために、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", 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"]
(1) 既存の問題: 既存のコード内の多くのコレクション クラス オブジェクトは () を使用して取得されます。 IE では受け入れられますが、MF では受け入れられません。
(2) 解決策:
添字演算として代わりに [] を使用します。例: document.forms("formName") は document.forms["formName"] に変更されます。
// HTML オブジェクトの ID をオブジェクトとして使用する問題name
IE では、HTML オブジェクトの ID を document の下位オブジェクトの変数名として直接使用できます。 MFにはありません。
解決策: オブジェクト変数として idName の代わりに getElementById("idName") を使用します。
12. //idName 文字列を使用したオブジェクトの取得に関する問題
IE では、eval(idName) を使用して ID idName を持つ HTML オブジェクトを取得できますが、MF ではできません。 解決策: eval(idName) の代わりに getElementById(idName) を使用します。
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