微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Window.onbeforeunload 页面刷新后未设置

如何解决Window.onbeforeunload 页面刷新后未设置

我正在制作一个错误报告器来捕获错误,然后就在用户刷新/关闭之前,它会将错误发送到服务器以放入日志文件中。我有一个 window.onerror 函数可以捕获错误并将其存储在一个数组中。在 window.onerror 函数中,我还设置了 window.onbeforeunload,它将向 service worker 发送对网络请求数据的请求(它会记录该页面加载的网络日志)。当ctrl-f3(在chromebook上,相当于windows上的ctrl-f5),然后尝试重新加载它会要求确认刷新页面。如果我这样做,然后尝试再次刷新它,它不会显示弹出窗口。我做了一些调试,看到当时的 window.onbeforeunload 不存在。事实上,我的代码部分(贴在下面)并没有执行!我将错误报告脚本作为外部文件放入我的 HTML 页面<head> 标记中。它围绕着一个匿名函数,没有 onload 侦听器。为什么这不起作用?我无法理解解决方案,所以我很乐意接受帮助。谢谢。

哦,差点忘了!这是我的代码(缩短为与问题相关的要点):

window.onerror = function(eventOrMessage,url,lineNumber,colNumber,error){
    window.onbeforeunload = function(){
      const channel = new broadcastChannel("net-log");
      channel.postMessage({requestLog:true});
      channel.addEventListener("message",function(event){
        if(event.data.encodedLogEntries){
          console.log(event.data.encodedLogEntries);
        }
      });
      return "Sending messages";
    };
    //works the first time,then doesn't set. Actually,the second time it doesn't execute this at all!
    console.log(window.onbeforeunload);
}

解决方法

我发现了问题,由于某种原因导致我的 service worker 出现了错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。