微信小程序兼容性问题该如何解决

微信小程序开发中,经常会遇到一些兼容性的问题,比如,就是在时间字符串转化为时间戳的方法中,我用的Date.parse(new Date())这个方法,但是在微信开发者工具中这个方法正常实现,但是在一些iphone设备和安卓的部分设备中不会实现相关功能,为了解决这个问题我只能导入了momentjs,不在调用系统方法了。这里我们就来讨论一下一些兼容性问题。

微信小程序兼容性问题该如何解决

运行环境差异

微信小程序运行在三端:iOS、Android 和 用于调试的开发者工具。

微信小程序兼容性问题该如何解决

三端的脚本执行环境以及用于渲染非原生组件的环境是各不相同的:

在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCore 中,是由 WKWebView 来渲染的,环境有 iOS8以上 
在 Android 上,小程序的 javascript 代码是通过 X5 JSCore来解析,是由 X5 基于 Mobile Chrome 53/57 内核来渲染的 
在 开发工具上, 小程序的 javascript 代码是运行在 nwjs 中,是由 Chrome Webview 来渲染的 
}, 尽管三端的环境是十分相似的,但是还是有些许区别:

ES6 语法支持不一致 语法上开发者可以通过开启 ES6 转 ES5 的功能来规避。

wxss 渲染表现不一致 尽管可以通过开启样式补全来规避大部分的问题,还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。

ES6 转 ES5

在 0.10.101000 以及之后版本的开发工具中,会默认使用 babel 将开发者 ES6 语法代码转换为三端都能很好支持的 ES5 的代码,帮助开发者解决环境不同所带来的开发问题。

样式补全

开启此选项,开发工具会自动检测并补全缺失样式,保证在低版本系统上的正常显示。尽管可以规避大部分的问题 ,还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。

兼容

小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。

文档会在组件,API等页面描述中带上各个功能所支持的版本号。

可以通过 wx.getSystemInfo 或者 wx.getSystemInfoSync 获取到小程序的基础库版本号。

可以通过 wx.canIUse 来判断是否可以在该基础库版本下直接使用对应的API或者组件

获取系统信息

同步

 

  1. let res = wx.getSystemInfoSync()
  2. console.log("同步获取系统信息:" + res);
  3. console.log(res);

异步:

 

  1. wx.getSystemInfo({
  2. success: function(res) {
  3. console.log("异步获取系统信息:");
  4. console.log(res);
  5. },
  6. })

版本比较

微信客户端和小程序基础库的版本号风格为 Major.Minor.Patch(主版本号.次版本号.修订号)。 开发者可以根据版本号去做兼容

 

  1. function compareVersion(v1, v2) {
  2. v1 = v1.split('.')
  3. v2 = v2.split('.')
  4. var len = Math.max(v1.length, v2.length)
  5.  
  6. while (v1.length < len) {
  7. v1.push('0')
  8. }
  9. while (v2.length < len) {
  10. v2.push('0')
  11. }
  12.  
  13. for (var i = 0; i < len; i++) {
  14. var num1 = parseInt(v1[i])
  15. var num2 = parseInt(v2[i])
  16.  
  17. if (num1 > num2) {
  18. return 1
  19. } else if (num1 < num2) {
  20. return -1
  21. }
  22. }
  23.  
  24. return 0
  25. }
  26.  
  27. compareVersion('1.11.0', '1.9.9')
  28. // 1

该基础库版本下直接使用对应的API或者组件的API

wx.canIUse(String)判断小程序的API,回调,参数,组件等是否在当前版本可用。此接口从基础库 1.1.1 版本开始支持。

String参数说明: 使用{API}.{method}.{param}.{options}或者{component}.{attribute}.{option}方式来调用,例如:

{API} 代表 API 名字  {method} 代表调用方式,有效值为return, success, object, callback  {param} 代表参数或者返回值  {options} 代表参数的可选值  {component} 代表组件名字  {attribute} 代表组件属性  {option} 代表组件属性的可选值

例子:

 

  1. wx.canIUse('openBluetoothAdapter')
  2. wx.canIUse('getSystemInfoSync.return.screenWidth')
  3. wx.canIUse('getSystemInfo.success.screenWidth')
  4. wx.canIUse('showToast.object.image')
  5. wx.canIUse('onCompassChange.callback.direction')
  6. wx.canIUse('request.object.method.GET')
  7.  
  8. wx.canIUse('live-player')
  9. wx.canIUse('text.selectable')
  10. wx.canIUse('button.open-type.contact')
 

Javascript 标准库兼容性问题

微信小程序的兼容性问题除了微信本身的 Bug 外,大部分是目标平台对 JavaScript 标准库支持程度不同造成的。像我最上面遇到的问题就是Javascript 标准库兼容性问题。对于这类问题我们可以打补丁,从其他地方找到比较完善的js代码,然后我们拷贝到我们的项目中。

以上就是微信小程序兼容性问题该如何解决的文章,如果希望了解更多小程序开发的文章,请关注网站,谢谢。

小程序工具提供多类型商城/门店小程序制作,可视化编辑 1秒生成5步上线。通过拖拽、拼接模块布局小程序商城页面,所看即所得,只需要美工就能做出精美商城。更多小程序请查看:小程序商店


【本站声明】
  1、本站文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系。
  2、本网站不对文章中所涉及的内容真实性、准确性、可靠性负责,仅系客观性描述,如您需要了解该类商品/服务详细的资讯,请您直接与该类商品/服务的提供者联系。


KESION 科汛软件

KESION 科汛软件是国内领先的在线教育软件及私域社交电商软件服务提供商,长期专注于为企业提供在线教育软件及社交电商SaaS平台解决方案。
公司核心产品云开店SaaS社交电商服务平台、在线教育SaaS服务平台、教育企业数字化SaaS云平台、企微营销助手、私有化独立部署品牌网校和在线教育咨询等。

KESION 不断通过技术创新,提供产品和服务,助力企业向数字化转型,通过科技驱动商业革新,让商业变得更智慧!



▼点击进入科汛官网了解更多



上/下篇
  • 微信小程序接口加密如何实现

  • 微信小程序实现输入支付密码demo

换一换相关推荐
精选内容
热点精选