每次面试时常被问到兼容题目的处理,偶然本身遇到过的题目居然也忘记了是怎样处理的,干脆本日把它们记录下来。
1、chrome浏览器下不支撑字体小于12像素
经由过程transform:scale(0.8)
这个css3属性来处理
2、一些挪动端装备不支撑vedio和audio的自动播放
处理要领是先经由过程用户 touchstart 触碰,触发播放并停息(音频最先加载,背面用 JS 再操纵就没题目了)
以下是代码:
document.addEventListener('touchstart',function() {
document.getElementsByTagName('audio')[0].play();
document.getElementsByTagName('audio')[0].pause();
});
3、ios体系下单击事宜有300ms的延时
涌现这个题目,是因为ios体系下有一个默许的双击放大页面(double tap to zoom)的计划,因此在检测到第一个用户tap事宜后,会hold一段时刻,若在此时刻内又检测到新的tap,则推断为双击事宜,反之则推断为单击事宜,而这个耽误的时刻就是300ms摆布。
处理计划:FastClick 是 FT Labs 特地为处理挪动端浏览器 300 毫秒点击耽误题目所开辟的一个轻量级的库。FastClick的完成道理是在检测到touchend事宜的时刻,会经由过程DOM自定义事宜马上动身模仿一个click事宜,并把浏览器在300ms今后的click事宜阻挠掉。
4、低版本浏览器不支撑getElementByClassName
处理要领是重写一个getByClass()函数:
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;
}
5、原生ajax中低版本ie不支撑xmlhttprequest对象
处理要领是做一个推断,如果有xmlhttprequest要领,则挪用,若没有,则改用ie浏览器的ActiveXobject要领:
if(window.XMLHttpRequest){
var oAjax=window.XMLHttpRequest
}else{
var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
}
以上就是我能想到的,今后如有新题目,我会继承更新,谢谢关注。