本文总结了在 Firefox 浏览器中运行 JavaScript 时遇到的几个典型兼容性问题。主要内容包括:document.all 方法的替代方案、innerText 属性在部分情况下的失效及 innerHTML 的使用、window.onload 与 body.onload 的区别、event 对象中坐标属性的获取方式,以及 Ajax 同步请求在 Firefox 中的特殊处理与代码实现。
Firefox 浏览器 JS 兼容性问题:document.all、innerText 及 Ajax 同步调用
例如:
1. document.all() 在 Firefox 中无法使用,必须将其修改为 document.getElementById();
2. obj.innerText = "XXX"; 在 Firefox 中偶尔会出现问题,替换为 obj.innerHTML = "XXX"; 即可解决。
3. var olE = document.body.onload; 用于获取 body 的 onload 函数。在 IE 中正常,但在 Firefox 中无效,需改为 window.onload 以解决此问题。
至于 window.onload 和 body.onload 之间的具体区别,尚需进一步查阅资料确认。
4. 在 IE 中,event 对象包含 x 和 y 属性,而 Firefox 中不存在这些属性。在 Firefox 中,event.x 应替换为 event.pageX。
解决方法是:mX = event.x ? event.x : event.pageX; 然后使用 mX 来替代 event.x。
5. 最令人头疼的是,在 Firefox 中无法进行 Ajax 同步调用!
例如 xmlHttp.open("get","xxx.aspx?id=xx",true); // true 表示异步请求
在 IE 和 Firefox 中均能正常运行。然而,xmlHttp.open("get","xxx.aspx?id=xx",false); 在 IE 中正常,但在 Firefox 中却不起作用。
此问题当时尚未找到解决方案。
6. 要吃饭了,未完待续。
-----------
第 5 个问题已解决。
进行同步调用时,请按以下方式编写代码:
代码如下:
xmlHttp.open("get","xxx.aspx?id=xx",false);
xmlhttp.send(null);
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
// alert(xmlhttp.responseText);
} else {
alert("您所请求的页面有异常。");
}
}