简易解决微信页面重定向,关闭微信浏览器页面,进来不浪费时间。

微信浏览器页面获得用户的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,无限循环。

应用场景和解决方案:(根据业务需求来选择解决方案)

扫描二维码关注公众号,回复: 6649776 查看本文章

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); 


以上都是个人陋闻,如有问题有劳指正,大家共同学习共同进步。如果有帮助到您,希望您能给动个小手点一下右下方的推荐,谢谢。

猜你喜欢

转载自www.cnblogs.com/yuqiuyeyun/p/11098682.html
今日推荐