常见的几个JavaScript兼容问题及解决方案
- 事件对象的兼容
e = ev || window.event;
- 滚动事件的兼容
scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
- 阻止冒泡事件的兼容
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true;
}
- 阻止浏览器默认行为的兼容
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
- 添加事件监听器的兼容
if(target.addEventListener){
target.addEventListener("click",function,false);
}else{
target.attachEvent("onclick",function);
}
- ajax 创建对象的兼容
var xhr = null;
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest();
}else {
xhr = new ActiveXObject("Microsoft XMLHTTP");
}
- 鼠标按键编码的兼容
function mouse(event){
var e= event || window.event;
if(event){
return e.button;
}else if(window.event){
switch(e.button){
case 1:return 0;
case 4:return 1;
case 2:return 2;
}
}
}
- IE 浏览器 event 对象的 x,y 属性和 firefox 浏览器 event 对象的 pageX, pageY 属性的等效问题
x = event.x ? event.x:event.pageX;
- IE 浏览器和 firefox 浏览器的 event 对象各自缺失 target 属性和 srcElement 属性的问题
var source = event.target || event.srcElement;
var target = event.relatedTarget || event.toElement;
- innerText 属性在 firefox 浏览器中无法正常给你做的问题
if(navigator.appName.indexOf("Explorer")>-1){
document.getElementById("element").innerText = "IE";
}else{
document.getElementById("element").textContent = "Firefox";
}
- IE 浏览器环境下不识别const 或者 let 定义的变量
解决方法:统一使用 var 定义变量。
- firefox 浏览器和 IE 浏览器禁止选取网页内容的不同写法
// firefox CSS
-moz-user-select:none;
// IE JS
obj.onselectstart = function(){
return false;
}
这里是万物之恋,我们下次再见了!