微信網頁開發調用微信jssdk接口遇到的坑以及最終解決方法 (持續更新)

1.微信網頁開發調用jssdk時報permission denied

大體是兩個緣由

(1)首先註冊時未將你所調用的接口名字添加至jsApiListandroid

(2)第二個就是你的這個公衆號沒有權限使用這個api,例如在開發環境中的微信頁面就沒法調取這個api,須要發佈後,到對應的有權限的公衆號中再打開對應的界面,調用api才成功ios

2.微信jssdk 使用微信內置地圖查看位置【openLocation】接口 最終顯示不精確

項目開發中,web端調用的是百度地圖api,而微信項目中調用的是騰訊本身的地圖,二者所使用的座標系有所不一樣,百度用的是本身的百度座標系,而高德地圖和騰訊地圖使用的是火星座標系,二者之間須要作一下轉換git

火星座標 轉換到 百度地圖座標
function huoxingToBaidu(hxLongitude, hxLatitude){  
                var X_PI = Math.PI * 3000.0 / 180.0;  
                var x = hxLongitude, y = hxLatitude;  
                var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * X_PI);  
                var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * X_PI);  
                var bdLongitude = z * Math.cos(theta) + 0.0065;  
                var bdLatitude = z * Math.sin(theta) + 0.006;  
                return {  
                    bdLongitude: bdLongitude,  
                    bdLatitude: bdLatitude  
                };  
            }
百度地圖座標 轉換到 火星座標
function baiduToHuoxing(bdLongitude,bdLatitude) {  
                var X_PI = Math.Pi * 3000.0 / 180.0;  
                var x = bdLongitude - 0.0065;  
                var y = bdLatitude - 0.006;  
                var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * X_PI);  
                var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * X_PI);  
                var hxLongitude = z * Math.cos(theta);  
                var hxLatitude = z * Math.sin(theta);  
                return {  
                    hxLongitude: hxLongitude,  
                    hxLatitude: hxLatitude  
                }  
            }

3.微信JSSDK 預覽圖片【previewImage】接口的坑, 安卓手機上,圖片預覽須要點擊兩次才能退出預覽

在微信網頁開發過程當中,測試提出的一個bug,在微信中預覽圖片是,點擊圖片,打開圖片正常,當再次點擊時,本來應該直接退出圖片預覽,可是卻須要點擊兩次才能退出預覽。web

分析緣由

應該是 previewImage 這個接口調用了兩次,進行了圖片的疊加。因此須要兩次才能退出api

最終得出的結果

代碼中實際上只調用了一次。微信

  1. 在Android系統的手機中,其實微信點擊網頁的圖片會自動調用這個接口一次。而後代碼中又對對這個接口調用了一次,這就形成了以上的結果。
  2. 可是在ios系統的手機中,微信並不會調用這個接口。
解決方案

在方法的最前面進行手機系統的判斷,當是Android系統直接return。
而後在在下面進行微信的previewImage接口的調用測試

js判斷是Android仍是ios
var u = navigator.userAgent;

isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, //android終端

isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端

2018.8.1更新
這個bug好像微信本身修復了,如今不管Android仍是ios,若是不調用這個方法,微信本身不會去調用了。code

相關文章
相關標籤/搜索