如何处理兼容性及在多个设备上进行调试

当然虚拟机测试也是OK的,在Max OS中,有自带的苹果虚拟设备。对于大部分Windows用户,苹果的虚拟机就没有了,需要用苹果真机测试。对于安卓设备的测试,以前会使用eclipse自带虚拟机测试,因为这个虚拟机非常的慢,每次打开都需要长时间等待,我们并不推荐。推荐 [www.genymotion.net](() ,一个基于[VirtualBox](()(一个免费的虚拟机管理软件)的安卓模拟机软件。

兼容性通用处理方法

=========

[CSSHack](()——针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果

CSSHack的写法很多,无法一一记住,推荐网站:[http://browserhacks.com/](()

可查询各个浏览器的hack写法,集合所有**浏览器CSS和JavaScript的HACK写法。**这个网站提供了Chrome、IE6/7/8/9/10、Opera、Safari几个主流浏览器的CSS HACK,当然还有Javascript和Media Query Hack写法,内容更新快,是设计师和前端人员最佳选择。

[Polyfill——一个用在浏览器API上的shim](()

Polyfill是用在浏览器API上的shim。我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill。这样新旧浏览器就都可以使用相同的API了。把旧的浏览器想象成为一面有了裂缝的墙,这些polyfill(腻子)会帮助我们把这面墙的裂缝抹平。

polyfill 是 shim 的一种。一个polyfill可以是一段代码(或者插件),提供了那些开发者们希望浏览器原生就支持的功能**。**主要抚平不同浏览器之间对js实现的差异。

shim 是将不同 API 封装成一种的库,shim将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现。

比如 jQuery是一个shim库,jQuery 的 . a j a x 方 法 封 装 了 X M L H t t p R e q u e s t 方 法 和 I E 用 的 A c t i v e X O b j e c t 方 式 来 创 建 x h r 对 象 ( 通 俗 地 讲 , 依 靠 浏 览 器 原 生 支 持 的 两 个 A P I , 封 装 成 .ajax方法 封装了 XMLHttpRequest 方法和 IE 用 的ActiveXObject 方式来创建 xhr 对象(通俗地讲,依靠浏览器原生支持的两个API,封装成 .ajaxXMLHttpRequestIEActiveXObjectxhrAPI.ajax这个新的API,使用时,只需调用$. 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 ajax这个新的API ,而不是调用XMLHttpRequest或ActiveXObject这两个原生API )。

可以把shim,理解成能够兼容之前版本的库,是一种优雅降级。

polyfill 特指 shim 成的 api 是遵循浏览器标准的,其典型做法是在IE浏览器中增加window.XMLHttpRequest ,内部实现使用 ActiveXObject(见下面举例)。

举例1:如何区分polyfill和shim

问题:旧版本的 IE 不支持标准的 XMLHttpRequest,但支持自家的 ActiveXObject 方法

解决办法1-shim(jQuery中,把XMLHttpRequest和ActiveXObject这两个新旧浏览器中的原生API,封装成 $.ajax 这个新的API。使用时,只要熟悉 $.ajax这个新的API 的使用就可以了,不用考虑浏览器的兼容问题)

$.ajax = function(url) {

if (isIE) {

XMLHttpRequest(url)

} else {

ActiveXObject(url)

}

}

解决办法2-polyfill(判断浏览器  是否支持新版浏览器中XMLHttpRequest这个原生API,如果不支持,就用旧版浏览器中ActiveXObject这个原生API 来实现  一个功能跟  新版浏览器中XMLHttpRequest这个原生API   完全一样的函数,并赋值给XMLHttpRequest这个原生API,这样,开发者使用时,就还可以使用XMLHttpRequest这个原生API啦,不用再去学习jQuery库咯)

if (!window.XMLHttpRequest) {

window.XMLHttpRequest = function(url) {

ActiveXObject(url)

}

}

举例2:如何区分polyfill和shim

问题:旧浏览器不支持 ES6 的 Array.prototype.find 方法

解决办法1-shim(封装一个新的API,使用时也调用这个新的API)

function arrayFind () {

if (Array.prototype.find) {

// …

} else {

// …

}

}

解决办法2-polyfill(判断浏览器  是否支持新版浏览器中Array.prototype.find这个原生API, 如果不支持,就实现一个函数,并赋值给Array.prototype.find这个原生API,这样,开发者使用时,就还可以使用Array.prototype.find这个原生API啦)

if (!Array.prototype.find) {

Array.prototype.find = function() {

// …

}

}

总结:如何区分polyfill和shim

以上举例中,两种解决办法都能解决跨浏览器兼容的问题,看着也没有特别的差别。

但是我们更推荐【解决办法2】,

首先,像shim这样应用一个新的API,有一定的学习成本,特别是在多人协作的过程中,如果你自己定义了一个方法去解决兼容问题,就需要告知其他开发人员这个新的API应该如何调用。而polyfill的做法,还是调用原生API就OK啦!

其次,polyfill可以实现按需加载,只在旧浏览器上加载兼容代码。

shiv——使得不支持HTML5标签的浏览器(诸如ie6-8), 支持html5标签

举例几个比较著名的shiv库:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值