在Safari浏览器中关闭页面无法触发visibilityChange事件

5
我正在尝试在用户关闭浏览器时保存一些统计数据,以下是代码:
    if (typeof document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support
      hidden = 'hidden';
      visibilityChange = 'visibilitychange';
    } else if (typeof document.mozHidden !== 'undefined') {
      hidden = 'mozHidden';
      visibilityChange = 'mozvisibilitychange';
    } else if (typeof document.msHidden !== "undefined") {
      hidden = 'msHidden';
      visibilityChange = 'msvisibilitychange';
    } else if (typeof document.webkitHidden !== 'undefined') {
      hidden = 'webkitHidden';
      visibilityChange = 'webkitvisibilitychange';
    } else {
      console.log('in else condition');
    }

if (typeof document.addEventListener === 'undefined' || hidden === undefined) {
      console.log("App requires a browser, such as Google Chrome or Firefox, that supports the Page Visibility API.");
    } else {
      document.addEventListener(visibilityChange, handleVisibilityChange, false);
    }

 function handleVisibilityChange() {
// Send a ajax call with **async: false**
}

以上代码在Mozilla Firefox和Google Chrome中运行良好,但在Safari中无法正常工作。我正在Mac OS上进行测试,Safari版本为Version 12.1.1 (14607.2.6.1.1)

请问是否有人能建议这是否是Safari中的预期行为,并且有什么解决方法。

谢谢。

1个回答

0

2
此外,为了获得更好的性能,您可以使用navigator.sendBeacon而不是AJAX调用。请参阅https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event#sending_end-of-session_analytics_on_transitioning_to_hidden - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接