笔试&&面试经验前端共享Java Web

整理前端面试题(十三):兼容性问题面试题合集

2017-09-04  本文已影响437人  熠辉web3
浏览器

一.Polyfill是什么?

Polyfill的准确意思为:用于实现浏览器并不支持的原生API的代码。

例如,querySelectorAll是很多现代浏览器都支持的原生Web API,但是有些古老的浏览器并不支持,那么假设有人写了库,只要用了这个库, 你就可以在古老的浏览器里面使用document.querySelectorAll,使用方法跟现代浏览器原生API无异。那么这个库就可以称为Polyfill或者Polyfiller。

那么问题就来了。jQuery是不是一个Polyfill?答案是No。因为它并不是实现一些标准的原生API,而是封装了自己API。一个Polyfill是抹平新老浏览器 标准原生API 之间的差距的一种封装,而不是实现自己的API。

已有的一些Polyfill,如 Polymer 是让旧的浏览器也能用上 HTML5 Web Component 的一个Polyfill。FlashCanvas是用Flash实现的可以让不支持Canvas API的浏览器也能用上Canvas的Polyfill。

这里有一堆Polyfills,有兴趣可以把玩一下:HTML5 Cross Browser Polyfills


二.Modernizr、HTML5Shiv、respond.js三者的区别?

总结:

  1. 一般情况下HTML5Shiv、respond这2个搭配使用。
  2. Modernizr 包括那2个,并且比他们更强大一些。

三.标准模式与兼容模式各有什么区别?

标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。


四.webSocket如何兼容低浏览器?(阿里面试题)


五.经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧 ?

//解决方案:
var page = {};
page.x = event.x ? event.x : event.pageX;
page.y = event.y ? event.y:event.pageY;


六.什么叫优雅降级和渐进增强?


七.为什么要用初始化CSS样式?


八.IE盒模型和W3C盒模型有什么不同?

CSS3中的box-sizing的属性就是为了这两种模式,border-box(IE盒明星)和content-box(W3C)


九.请分别封装添加事件和移除事件的函数,用以解决兼容性问题?

function addEvent(elem, eventName, handler) {
  if (elem.attachEvent) {
    elem.attachEvent("on" + eventName,function(){
      handler.call(elem)});   //此处使用回调函数call(),让this指向elem  
  } else if (elem.addEventListener) {
      elem.addEventListener(eventName, handler, false);  
  }
}
function removeEvent(elem, eventName, handler) {
  if (elem.detachEvent) {
    elem.detachEvent("on" + eventName,function(){
        handler.call(elem)});     //此处使用回调函数call(),让this指向elem  
  } else if (elem.removeEventListener) {
    elem.removeEventListener(eventName, handler, false);  
  }
}
//IE提供了attachEvent和detachEvent两个接口,而Firefox提供的是addEventListener和removeEventListener。

十.写一个function,清除字符串前后的空格。(兼容所有浏览器)?

if (!String.prototype.trim) { 
     String.prototype.trim = function() { 
         return this.replace(/^\s+/, "").replace(/\s+$/,"");
 } 
} 
上一篇下一篇

猜你喜欢

热点阅读