请严正拒绝“关闭页面,弹框挽留用户”的需求

产品提了个“关闭页面,弹出提示框挽留用户”的 需求,网上找了资料后,发现很难实现,微信中也实现不了,目前只有微信中京东可以实现“关闭/再逛逛”的弹框挽留,总结下:

beforeunload

触发条件: 当页面的资源将要卸载(及刷新或者关闭标签页前)

只能在PC浏览器上被触发,而且在chrome浏览器中不能自定义返回文字

window.addEventListener('beforeunload', function (e) {
    let confirmationMessage = `还差1步即可获取5万额度,千万别放弃呀`;
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage;                            //Webkit, Safari, Chrome
  });
谷歌浏览器效果
unload

触发条件: 窗口关闭或者 document 对象将要卸载时触发

如果通过按下“前进/后退”导致页面卸载,并不会触发 unload 事件。
在移动端和PC端的safari中都不会被触发

unload在ios中被废弃了,需要使用pagehide替代

pagehide

页面跳走,或者关闭之前的瞬

Firefox 和 Safari 没有问题,但 google chrome 直到现在,除了加载页面后会正常触发,前进/后退操作都是不会触发此事件的。
在移动端方面,Safari 和 webkit 内核的浏览器均不支持此事件。

visibilitychange

触发条件: 浏览器标签页被隐藏或显示的时候会触发

无法阻止默认事件, 只是记录了状态,可以用来检测用户是否在看当前页面

    document.addEventListener('visibilitychange', function (e) {
      console.log('我监听到了浏览器的返回按钮事件啦');
   
    }

pushHistory

触发条件: 返回时 触发, 刷新、关闭页面不触发

    function pushHistory() {
      const pathname = window.location.href;
      let state = {
        title: 'title',
        url: pathname
      };
      window.history.pushState(state, 'title', pathname);
    }
    pushHistory();
   window.addEventListener("popstate", function(e) { 
     console.log('返回')
        showAlert(xxx, function(){
            // 留在当前页面时重新 push
        pushHistory();
      }, funcrion(){
            // 离开时执行原本操作
        navigation.back();
      });
    }, false);

ios支持事件官方文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容