Window.onbeforeunload 页面刷新后未设置
Window.onbeforeunload not setting after page refresh
我正在制作一个捕获错误的错误报告器,然后就在用户 refreshes/closes 之前,它会将错误发送到服务器以放入日志文件中。我有一个 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 中的一个错误,由于某种原因导致了困境。
我正在制作一个捕获错误的错误报告器,然后就在用户 refreshes/closes 之前,它会将错误发送到服务器以放入日志文件中。我有一个 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 中的一个错误,由于某种原因导致了困境。