简易解决微信页面重定向,关闭微信浏览器页面,进来不浪费时间。
微信浏览器页面获得用户的code需调用微信的API,并且进行一个重定向的页面跳转。
以下是重定向的JS代码:
var wxCode = getQueryString(“code”);
$(function(){
/*监控用户按返回的方法*/
function pushHistory() {
var state = {
title: “title”,
url: “#”
};
window.history.pushState(state, “title”, “#”);
}
pushHistory();
window.addEventListener(\’popstate\’, function (e) {
//在此输入用户点击返回后触发的关键代码,简单点就是下面所述的红色代码。
}, false);
if ((wxCode == null || wxCode.trim().length <= 0)) {
var url = \’https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信的APPID&redirect_uri=\’ + encodeURIComponent(window.location) + \’&response_type=code&scope=snsapi_base&state=STATE%23wechat_redirect&connect_redirect=1#wechat_redirect\’;
window.location.href = url;
} else { //获取code后干想干的事情 。。。 }
});
用户初次进入此页面,url上没有code的值,就会get调用微信API,然后刷新当前页面并在url后面拼接?code=用户的code值。
这段代码给我造成了困扰:在微信浏览器中打开这个网页,每次点返回按钮都会刷新url,从而丢失code,然后再次调用微信API,无限循环。
应用场景和解决方案:(根据业务需求来选择解决方案)
1、场景:A、B 两个页面,A页面点击跳转到B页面,B页面放当前重定向代码。这时要在B页面JS中加监控用户的点返回的方法,用户点击返回则回退2步 window.history.back(-2);
这时就回到了第一个页面,用户再次点击返回,就能关闭微信浏览器了,避免在B页面死循环定向。
2、场景:一个页面,重定向代码也放在其JS中。在微信中可以用内置的JS( jweixin-1.2.0.js )与方法 WeixinJSBridge.call(\’closeWindow\’);
注:这里有个坑,由于不是自己的玩意,他什么时候加载成功了,我这个方法才生效(我测试是差不多页面加载好过1秒多点点)。
如果页面进去加载一秒差不多,刚好微信的内置JS没有加载完,就点击返回就会无效,之后继续点击返回都会无效,因为没有没有绑定好方法。如果手速慢点就有效,搞得和抽奖一样。
这时我耍了一个小聪明,直接把微信的js下下来直接引用,结果并没有什么卵用。由于是内置的,如果你还在JS中写在线加载微信JS就没有必要了。
于是我就写在了定时器中,定时循环任务,当我点击返回之后,就算我在微信JS未完成的时候调用这个方法无效,但是隔个几毫秒,继续调用,这个JS一加载完成,然后方法绑定上去就能自动退出浏览器。
window.setInterval(function(){parent.WeixinJSBridge.call(\’closeWindow\’);},200);
以上都是个人陋闻,如有问题有劳指正,大家共同学习共同进步。如果有帮助到您,希望您能给动个小手点一下右下方的推荐,谢谢。