我正在尝试使用 onbeforeunload 事件来记录页面的一些最终日志(我无法在访问中间执行此操作,因为我必须在用户离开之前获取日志)。
function handleBeforeUnload(evt) {
evt.preventDefault();
evt.returnValue = '';
// make some log
logSomeFinalizedInfo();
return null;
}
但是,在 Android 手机上,会弹出一条消息“您确定要离开吗”,这不是预期的情况,如何在不弹出此消息的情况下使用此事件处理程序?
请考虑使用专门用于此目的的
Beacon API
。 这些技术不仅代表了较差的编码模式,其中一些技术也不可靠,导致下一个导航的页面加载性能较差。 Beacon API 提供了解决这些问题的标准方法。
终于找到了解决办法,就是使用完后移除handler(removeEventListener):
function handleBeforeUnload(evt) {
evt.preventDefault();
evt.returnValue = '';
// make some log
logSomeFinalizedInfo();
removeEventListener('beforeunload', handleBeforeUnload);
}
这对我有用:
const handleBeforeUnload = (event) => {
event.stopPropagation();
...some logic
return undefined;
};
看起来调用 event.preventDefault() 或定义 event.returnValue 是导致我弹出窗口的原因。无需按照已接受答案中的建议删除事件侦听器。