如何使用 onbeforeunload 事件处理程序而不弹出消息?

问题描述 投票:0回答:3

我正在尝试使用 onbeforeunload 事件来记录页面的一些最终日志(我无法在访问中间执行此操作,因为我必须在用户离开之前获取日志)。

function handleBeforeUnload(evt) {
    evt.preventDefault();
    evt.returnValue = '';

    // make some log
    logSomeFinalizedInfo();

    return null;
}

但是,在 Android 手机上,会弹出一条消息“您确定要离开吗”,这不是预期的情况,如何在不弹出此消息的情况下使用此事件处理程序?

javascript onbeforeunload
3个回答
1
投票

请考虑使用专门用于此目的的

Beacon API

更多信息请点击这里 - https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API

这些技术不仅代表了较差的编码模式,其中一些技术也不可靠,导致下一个导航的页面加载性能较差。 Beacon API 提供了解决这些问题的标准方法。


0
投票

终于找到了解决办法,就是使用完后移除handler(removeEventListener):

function handleBeforeUnload(evt) {
    evt.preventDefault();
    evt.returnValue = '';

    // make some log
    logSomeFinalizedInfo();

    removeEventListener('beforeunload', handleBeforeUnload);
}

0
投票

这对我有用:

const handleBeforeUnload = (event) => {
    event.stopPropagation();
      ...some logic
      return undefined;
    };

看起来调用 event.preventDefault() 或定义 event.returnValue 是导致我弹出窗口的原因。无需按照已接受答案中的建议删除事件侦听器。

© www.soinside.com 2019 - 2024. All rights reserved.