小程序webView 不交互无法回退popstate不生效解决办法

小程序webview中调用popstate返回

业务让做一个webview嵌入小程序中,操作webview内容跳转页面后,需要点击左上角返回小程序页面。发现webview中的页面如果有跳转,小程序的左上角返回执行的先是浏览器历史记录回退事件,当回退到最初进来的页面后,才会执行退出webview,回退到小程序页面中事件;
于是通过在webview中先清空历史记录再监听popstate方法做到webview无论跳转多少次都能执行小程序的返回事件;
参考代码如下:

window.onload = function(){
	//创建script标签引入小程序jssdk
    var scriptEl = document.createElement("script");
    scriptEl.src = "https://res.wx.qq.com/open/js/jweixin-1.6.0.js";
    document.body.appendChild(scriptEl);
    if (wx != undefined && wx != null) {
    	//清空历史记录
      history.pushState({ page: 1 }, null, window.location.href);
      //监听popstate方法;
      window.addEventListener("popstate", (event) => {
        wx.miniProgram.navigateBack();
      });
    }
}

小程序popstate页面不交互回退失效问题

当使用popstate监听返回事件执行小程序的返回事件方法后,发现如果webview跳转后用户未在页面中进行交互,popstate监听不到!于是灵机一动,开始监听webview的window.unload、window.beforeunload、$(window).on('pagehide‘)事件, 如果用户未与webview交互,就执行了以上几个事件,说明用户是通过左上角触发的离开事件,我们再执行小程序的返回方法;
代码如下:

  var isTouch = false;
  $(function () {
	//当页面进行过交互,则不执行小程序的返回事件,只当页面触发popstate方法时执行
    document.body.addEventListener("touchstart", function () {
      isTouch = true;
    });
      //监听unload事件,如果未交互则是小程序左上角返回
    $(window).on("unload", function (event) {
      // 例如保存数据、提示离开确认等
      !isTouch &&  wx.miniProgram.navigateBack();
    });
      //监听pagehide事件,如果未交互则是小程序左上角返回
    $(window).on("pagehide", function (event) {
      // 例如保存数据、提示离开确认等
      !isTouch && wx.miniProgram.navigateBack();
      return true;
    });

    var scriptEl = document.createElement("script");
    scriptEl.src = "https://res.wx.qq.com/open/js/jweixin-1.6.0.js";
    document.body.appendChild(scriptEl);
    //然后监听popstate事件
    if (wx != undefined && wx != null) {
      history.pushState({ page: 1 }, null, window.location.href);
      window.addEventListener("popstate", (event) => {
        wx.miniProgram.navigateBack();
      });
    }
  });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值