一、問題概述
scanqrcode:permissiondenied是指在使用H5頁面中的JSAPI掃碼功能,請求該能力時返回的錯誤碼。該錯誤碼錶明當前應用程序沒有獲取到使用掃碼功能的權限,導致無法進行該操作。
二、可能原因
1、未獲取掃碼權限
wx.config({
beta: true,
debug: false,
appId: '',
timestamp: 1000000000,
nonceStr: '',
signature: '',
jsApiList: ['scanQRCode']
});
wx.ready(function () {
// 在這裡調用掃一掃API
wx.scanQRCode();
});
上述代碼為微信 JSAPI 調用方式,其中需要申請“掃一掃”API權限,若未申請,調用對應的接口會被拒絕。
2、應用未通過認證
var div_qrcode = document.getElementById("qrcode");
wx.config({
beta: true,
debug: false,
appId: '',
timestamp: 1000000000,
nonceStr: '',
signature: '',
jsApiList: ['openWXDeviceLib']
});
wx.ready(function () {
wx.invoke('openWXDeviceLib', {}, function (res) {
div_qrcode.innerText = "開始掃描";
wx.scanQRCode({
success: function (res) {
div_qrcode.innerText = "掃描成功";
},
fail: function (res) {
div_qrcode.innerText = "掃描失敗,請重試";
}
});
});
});
上述代碼中使用了”openWXDeviceLib”接口,需要應用通過微信公眾平台的認證,並且應用具有對應接口的權限才可以調用,未經認證的應用無法進行該操作。
三、解決方案
1、正確申請權限
wx.config({
beta: true,
debug: false,
appId: '',
timestamp: 1000000000,
nonceStr: '',
signature: '',
jsApiList: ['scanQRCode']
});
wx.ready(function () {
wx.checkJsApi({
jsApiList: ['scanQRCode'],
success: function (res) {
if (res.checkResult.scanQRCode) {
wx.scanQRCode();
} else {
alert('請先調用wx.config接口注入所需權限');
}
}
});
});
可以用checkJsApi方法驗證調用JSAPI是否成功,並且可以同時檢驗多個JSAPI是否可用,如果返回的checkResult屬性中對應JSAPI為true,則表示當前應用具備調用該JSAPI的權限,可直接使用。
2、檢查設備網絡狀態
wx.checkJsApi({
jsApiList: [
'getNetworkType',
'startRecord',
'stopRecord',
'translateVoice',
'onMenuShareTimeline',
'onMenuShareAppMessage'
],
success: function (res) {
console.log(JSON.stringify(res));
document.getElementById("btn").onclick = function () {
wx.checkJsApi({
jsApiList: ['scanQRCode'],
success: function (res) {
if (res.checkResult.scanQRCode) {
wx.scanQRCode({
needResult: 1,
scanType:["qrCode"],
success: function (res) {
alert(res.resultStr);
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
} else {
alert("請先調用wx.config注入相關權限");
}
}
});
};
}
});
通過檢查微信環境中網絡狀態,如果設備的網絡狀態欠佳,可引導用戶利用其他網絡環境,或者重新加載頁面,以確保能夠獲取到使用掃碼功能的權限。
四、小結
以上就是scanqrcode:permissiondenied問題的解析,對於該問題的解決方案,可以通過正確申請權限,檢查設備網絡狀態等多方面展開。在開發過程中,需要認真排查錯誤,仔細檢查代碼問題,從不同角度思考問題的可能性,以確保應用程序的正常運行。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/256533.html