微信网页开辟挪用微信jssdk接口碰到的坑以及终究解决方法 (延续更新)

1.微信网页开辟挪用jssdk时报permission denied

大抵是两个缘由

(1)起首注册时未将你所挪用的接口名字增加至jsApiList

(2)第二个就是你的这个民众号没有权限运用这个api,例如在开辟环境中的微信页面就没法调取这个api,须要宣布后,到对应的有权限的民众号中再翻开对应的界面,挪用api才胜利

2.微信jssdk 运用微信内置舆图检察位置【openLocation】接口 终究显现不精确

项目开辟中,web端挪用的是百度舆图api,而微信项目中挪用的是腾讯本身的舆图,二者所运用的坐标系有所不同,百度用的是本身的百度坐标系,而高德舆图和腾讯舆图运用的是火星坐标系,二者之间须要做一下转换

火星坐标 转换到 百度舆图坐标

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,在微信中预览图片是,点击图片,翻开图片一般,当再次点击时,底本应当直接退出图片预览,然则却须要点击两次才退出预览。

剖析缘由

应当是 previewImage 这个接口挪用了两次,举行了图片的叠加。所以须要两次才退出

终究得出的效果

代码中实际上只挪用了一次。

  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,假如不挪用这个要领,微信本身不会去挪用了。

    原文作者:澹台宇鹏
    原文地址: https://segmentfault.com/a/1190000015735047
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞