微信小程序在功能不斷升級(jí)的過程中經(jīng)常會(huì)發(fā)布一些新的組件和API,但是這些組件和API僅支持高版本,低版本的微信無法使用,因此需要進(jìn)行兼容處理。首先,當(dāng)我們在使用一個(gè)組件或API時(shí)需要先查看其官方文檔上的描述頁,上面會(huì)帶有各個(gè)功能所支持的版本,然后再使用以下方法進(jìn)行兼容:
1、通過wx.getSystemInfo或者wx.getSystemInfoSync獲取到小程序的基礎(chǔ)庫版本號(hào)SDKVersion,與某功能所支持的版本進(jìn)行比較。另外SDKVersion也是1.1.0版本庫才引入的屬性,所以對(duì)于1.1.0以下的版本該字段為undefined,不過因?yàn)樾碌墓δ芡?.1.0及以上版本引入的,所以也可以用于比較版本。
例:
wx.getSystemInfo({
success: function(res) {
console.log(res.SDKVersion)
}
})
另外getSystemInfo還能獲取以下信息:
model 手機(jī)型號(hào)
pixelRatio 設(shè)備像素比
screenWidth 屏幕寬度 1.1.0
screenHeight 屏幕高度 1.1.0
windowWidth 可使用窗口寬度
windowHeight 可使用窗口高度
language 微信設(shè)置的語言
version 微信版本號(hào)
system 操作系統(tǒng)版本
platform 客戶端平臺(tái)
SDKVersion 客戶端基礎(chǔ)庫版本 1.1.0
2、通過wx.canIUse(String)判斷小程序的API,回調(diào),參數(shù),組件等是否在當(dāng)前版本可用。
String參數(shù)說明: 使用${API}.${method}.${param}.${options}或者${component}.${attribute}.${option}方式來調(diào)用:
${API} 代表 API 名字
${method} 代表調(diào)用方式,有效值為return, success, object, callback
${param} 代表參數(shù)或者返回值
${options} 代表參數(shù)的可選值
${component} 代表組件名字
${attribute} 代表組件屬性
${option} 代表組件屬性的可選值
例:
wx.canIUse('openBluetoothAdapter')
wx.canIUse('getSystemInfoSync.return.screenWidth')
wx.canIUse('getSystemInfo.success.screenWidth')
wx.canIUse('showToast.object.image')
wx.canIUse('onCompassChange.callback.direction')
wx.canIUse('request.object.method.GET')
wx.canIUse('contact-button')
wx.canIUse('text.selectable')
wx.canIUse('button.open-type.contact')
需要注意的是 wx.canIUse 這個(gè) api 本身也是需要判斷是否支持的,可以先通過 if(wx.canIUse) 判斷其是否支持,然后再使用 wx.canIUse 判斷其他的屬性是否支持。
3、對(duì)于新增的API最簡單的兼容方式是直接通過if(api)的方式判斷該能否調(diào)用:
例1:
if (wx.openBluetoothAdapter) {
wx.openBluetoothAdapter()
} else {
// 如果希望用戶在最新版本的客戶端上體驗(yàn)?zāi)男〕绦?,可以這樣子提示
wx.showModal({
title: '提示',
content: '當(dāng)前微信版本過低,無法使用該功能,請(qǐng)升級(jí)到最新微信版本后重試。'
})
}
例2:
加載過程中的進(jìn)度框,可以避免用戶在加載過程中進(jìn)行操作導(dǎo)致混亂。
function showLoading(message) {
if (wx.showLoading) {
// 基礎(chǔ)庫 1.1.0 微信6.5.6版本開始支持,低版本需做兼容處理
wx.showLoading({
title: message,
mask: true
});
} else {
// 低版本采用Toast兼容處理并將時(shí)間設(shè)為20秒以免自動(dòng)消失
wx.showToast({
title: message,
icon: 'loading',
mask: true,
duration: 20000
});
}
}
function hideLoading() {
if (wx.hideLoading) {
// 基礎(chǔ)庫 1.1.0 微信6.5.6版本開始支持,低版本需做兼容處理
wx.hideLoading();
} else {
wx.hideToast();
}
}
4、對(duì)于API的參數(shù)或者返回值有新增的參數(shù),可以判斷用以下代碼判斷:
wx.showModal({
success: function(res) {
if (wx.canIUse('showModal.cancel')) {
console.log(res.cancel)
}
}
})