每次面试时常被问到兼容问题的解决,有时本身遇到过的问题居然也忘记了是怎么解决的,索性今天把它们记录下来。css
经过transform:scale(0.8)
这个css3属性来解决ios
解决方法是先经过用户 touchstart 触碰,触发播放并暂停(音频开始加载,后面用 JS 再操做就没问题了)
如下是代码:css3
document.addEventListener('touchstart',function() { document.getElementsByTagName('audio')[0].play(); document.getElementsByTagName('audio')[0].pause(); });
出现这个问题,是因为ios系统下有一个默认的双击放大页面(double tap to zoom)的方案,所以在检测到第一个用户tap事件后,会hold一段时间,若在此时间内又检测到新的tap,则判断为双击事件,反之则判断为单击事件,而这个延迟的时间就是300ms左右。面试
解决方案:FastClick 是 FT Labs 专门为解决移动端浏览器 300 毫秒点击延迟问题所开发的一个轻量级的库。FastClick的实现原理是在检测到touchend事件的时候,会经过DOM自定义事件当即出发模拟一个click事件,并把浏览器在300ms以后的click事件阻止掉。ajax
解决方法是重写一个getByClass()函数:chrome
function getByClass(obj,sClass){ var aResult = []; if(obj.getElementsByClassName){ aResult = obj.getElementsByClassName(sClass); }else{ var aEle = obj.getElementsByTagName('*'); for(var i=0;i<aEle.length;i++){ var aClass = aEle[i].className.split(' '); if(findInArr(aClass,sClass)){ //调用自定义的findArr方法 aResult.push(aEle[i]); } } } return aResult; } function findInArr(arr,sClass){ for(var i=0;i<arr.length;i++){ if(arr[i]==sClass){ return true; } } return false; }
解决方法是作一个判断,若是有xmlhttprequest方法,则调用,若没有,则改用ie浏览器的ActiveXobject方法:浏览器
if(window.XMLHttpRequest){ var oAjax=window.XMLHttpRequest }else{ var oAjax=new ActiveXObject('Microsoft.XMLHTTP'); }
以上就是我能想到的,之后如有新问题,我会继续更新,感谢关注。函数