关于前端js兼容性问题的积累

1、event的兼容写法
(1) 实参不传入event
形参中无论是否接收event时,直接使用 event || window.event, 谷歌和ie正常,在火狐下会报event为undefined,需要在形参中接收event,并添加 arguments.callee.caller.arguments[0] 写发
(2) 实参传入event
形参接收event,可直接使用 event || window.event,谷歌,火狐,ie正常
建议

// 可不传入实参event,但需要接收形参,否则火狐下会报错
function aa(event){
	var e = event || window.event || arguments.callee.caller.arguments[0];
}

2、event.target的兼容写法

function aa(event){
	var e = event || window.event || arguments.callee.caller.arguments[0];
	// 获取触发该事件的元素
	var tag = e.target||e.srcElement;
}

3、函数中对形参进行设置默认值
谷歌和火狐正常,ie所有版本都不兼容,写法如下:

function aa(args='11'){		// 设置args默认为'11'
	console.log(args)
}
aa()	// 控制台输出 11
aa(22)  // 控制台输出 22

ie下可写为:

function aa(args){
	var aa = args == undefined ? '11' : args;
	console.log(aa)
}
aa()	// 控制台输出 11
aa(22)  // 控制台输出 22

4、火狐下对拖拽事件的不兼容
Firefox拖拽必须使用下面的方法去携带拖拽对象的数据:

event.dataTransfer.setData("id",xxx);  // 设置拖拽对象的id或者是拖拽对象的其他的数据
event.dataTransfer.getData("id");  // 获取所设置的拖拽对象的数据

完整代码如下:

var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isFF = userAgent.indexOf("Firefox") > -1; //判断是否为Firefox浏览器

// 开始拖拽
function drag(event){
	var e = event || window.event || arguments.callee.caller.arguments[0];
	if(isFF){
		// 需要携带拖拽的元素的id
		e.dataTransfer.setData("id",xxx);
	}else{
		// 可直接获取拖拽的元素
	}
}

// 结束拖拽
function dragEnd(event){
	var e = event || window.event || arguments.callee.caller.arguments[0];
	if(isFF){
		// 获取携带的拖拽元素的数据
		var dragEleId = e.dataTransfer.getData("id");
		// 再通过 dragEleId 进行获取拖拽的元素
	}
}

5、阻止事件冒泡的兼容写法

function(event){
	var e = event || window.event || arguments.callee.caller.arguments[0];
  if(e.stopPropagation){
    e.stopPropagation();
  }else{
  	e.cancelBubble = true;
  }
}

6、阻止默认事件的兼容写法

function(event){
	var e = event || window.event || arguments.callee.caller.arguments[0];
	if(e.prevenDefault){
		e.preventDefault();
	}else{
		e.returnValue = false;
	}
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端框架的兼容性问题是开发过程中常见的挑战,主要涉及以下几个方面: 1. **浏览器兼容性**:不同的浏览器对HTML、CSS和JavaScript的解析标准存在差异。例如,IE浏览器可能不支持某些新的CSS3特性,而现代浏览器如Chrome、Firefox、Safari等则普遍支持。开发者通常需要使用各种工具(如Babel、polyfill等)来确保代码在旧版浏览器中也能正常运行。 2. **API兼容性**:不同的框架可能会有不同的API设计,比如React和Angular的组件系统就有不同。开发者在使用框架时需要确保目标环境所使用的版本和框架功能在目标浏览器或平台上的可用性。 3. **设备兼容性**:移动设备和桌面电脑的屏幕尺寸、触摸事件处理、CSS媒体查询等都有区别。响应式设计和跨平台框架(如React Native或Flutter)帮助开发者处理这种兼容性。 4. **IE浏览器的特别问题**:由于IE浏览器的遗留问题和历史版本众多,针对它的兼容性工作可能更为复杂,可能需要额外的工作来确保完全兼容。 5. **渐进增强与优雅降级**:这是一种策略,首先假设使用最新技术,然后为不支持的浏览器提供降级的解决方案,确保所有用户都能得到基本的功能体验。 为了优化前端框架的兼容性,开发者通常会关注兼容性测试,使用自动化工具如Jest、Mocha等进行测试,并在必要时为特定浏览器编写特定的适配代码。同时,持续关注框架的更新和社区的最佳实践也是提高兼容性的关键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值