目前所遇到兼容性问题的解决方法

1属性不兼容

如获取元素的样式,IE浏览器支持  obj.currentStyle.width等的方式读取元素样式表内的样式,其他浏览器支持  window.getComputedStyle(元素对象名,null).width的方式读取,因此兼容函数可以封装如下

 function getStyle(obj, name){
		 	return getComputedStyle(obj, null)[name] ||	obj.currentStyle[name];
	} 

即主要是  ||   或运算符的使用。

除此之外,事件对象的兼容性问题也可以通过这样的方式来解决。

btn.onclick = function(event){
    event = event || window.event;
}

2方法不兼容

如大部分浏览器支持addEventListener为对象绑定多个事件响应函数,但是IE8及以下浏览器却不支持addEventListener,只支持attachEvent的浏览器。

因此定义一个函数为指定元素绑定事件响应函数,其代码如下。

// 封装函数,参数  绑定的对象obj,事件字符串eventStr,回调函数fun
// 默认传入的eventStr是带on的
		function bind(obj, eventStr, fun){
			// 需要解决的问题:
			// 1  浏览器对于addEventListener和attachEventListener的兼容性
			// 2  两个事件绑定函数返回的this不同
			// 3  addEventListener的eventStr不带on,而attachEventListener带on
			if (obj.addEventListener) {
				// 去除on
				eventStr = eventStr.replace("on", "");
				obj.addEventListener(eventStr, fun, false);
			} else {
				obj.attachEvent.call(obj, eventStr, fun);
			}
		}

即通过if-else的判断来解决兼容问题,这是方法类兼容性问题所应采用的方法,因为有的方法不一定会返回值,所以不能只靠 || 或运算符解决兼容性问题。

另外一种解决方法兼容性的方法:

box1.setCapture && box1.setCaputure();
//即当box1.setCapture为真是,再执行box1.setCapture(),实现了if选择的效果。

这是因为,前边的box1.setCapture就相当于if(box1.setCapture)也即if(Boolean(box1.setCaputre));

根据Boolean的转换规则,只有传入 空字符串、0、NaN、null、undefined返回都是false,其余都是ture,函数对象和对象都是返回true;

3undefined的使用,判断一个对象是否存在从而解决兼容性的问题

if(typeof XMLHttpRequest != "undefined"){

//.......

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值