一開始咱們想到的是可能微信這邊的Bug,但細想一下應該不是。由於可能涉及到了IOS的底層原理的問題,多是不受微信所控。(有問題歡迎拍磚)php
出現問題得解決問題啊,不能把問題晾在那邊無論,這是程序員的尊嚴!html
我這個是SPA應用,因此拿其中一個vue項目來作探討,其餘SPA應用同理vue
咱們把全部設置都檢查了一遍,最終發現是當前路由location.href不一致的問題程序員
咱們能夠去嘗試一下去到具體某個頁面:瀏覽器
在Android下微信複製當前連接而後粘貼到輸入框裏,會發現路由是具體到某個路由。例如:www.xxxx.com/news/xxxx微信
在IOS下微信複製當前連接而後粘貼到輸入框裏,會發現路由是首頁。例如:wwwx.xxxx.com/indexapp
因此問題就定位在了url上,此次我只拿調取掃一掃功能,其他功能自行加上。url
###那咱們只須要判斷訪問設備是安卓仍是IOS便可spa
首先在index.html頁面中引入JSSDK文件.net
而後在App.vue文件中
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { const url = location.href const res = await getSignature(url) //獲取設置config的參數 let { timestamp, noncestr, signature, appId } = res.data wx.config({ beta: true, debug: false, appId: appId, timestamp: timestamp, nonceStr: noncestr, signature: signature, jsApiList: ['scanQRCode'] }); wx.ready(function () { console.log('設備已經可使用') }) }
具體到某個頁面的時候 例如:news下
if (/(Android)/i.test(navigator.userAgent)) { let url = location.href const res = await getSignature(url) //獲取設置config的參數 let { timestamp, noncestr, signature, appId } = res.data wx.config({ beta: true, debug: false, appId: appId, timestamp: timestamp, nonceStr: noncestr, signature: signature, jsApiList: ['scanQRCode'] }); wx.ready(function () { console.log('設備已經可使用') }) }
這僅限
於在微信自帶的遊覽器上。企業微信自帶的遊覽器這方法是不行的。
經過微信企業瀏覽器掃碼獲取到的微信瀏覽器信息以下:(圖片摘取於CSDN)
微信客戶端掃碼獲取到的信息以下:
對比企業微信遊覽其和微信遊覽器的信息,多出了wxwork。那麼咱們只須要添加多一個判斷條件就行了
在App.vue文件中
if (/(wxwork)/i.test(navigator.userAgent)) { return } if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { const url = location.href const res = await getSignature(url) //獲取設置config的參數 let { timestamp, noncestr, signature, appId } = res.data wx.config({ beta: true, debug: false, appId: appId, timestamp: timestamp, nonceStr: noncestr, signature: signature, jsApiList: ['scanQRCode'] }); wx.ready(function () { console.log('設備已經可使用') }) }
在news文件中
if (/(Android)/i.test(navigator.userAgent) || /(wxwork)/i.test(navigator.userAgent)) { let url = location.href const res = await getSignature(url) //獲取設置config的參數 let { timestamp, noncestr, signature, appId } = res.data wx.config({ beta: true, debug: false, appId: appId, timestamp: timestamp, nonceStr: noncestr, signature: signature, jsApiList: ['scanQRCode'] }); wx.ready(function () { console.log('設備已經可使用') }) }