Я делаю отчет об ошибках, который фиксирует ошибки, а затем непосредственно перед тем, как пользователь обновляет/закрывает, он отправляет ошибки на сервер для помещения в файл журнала. У меня есть функция window.onerror
, которая фиксирует ошибки и сохраняет их в массиве. Внутри функции window.onerror
я также устанавливаю window.onbeforeunload, который будет запрашивать данные сетевого запроса от работника службы (который ведет запись сетевых журналов загрузки этой страницы). Когда ctrl-f3 (на хромбуке, эквивалентно ctrl-f5 в Windows), попробуйте перезагрузить его, он запросит подтверждение для обновления страницы. Если я это сделаю, попробуйте обновить его снова, всплывающее окно не будет отображаться. Я сделал некоторую отладку, чтобы увидеть, что window.onbeforeunload
в то время не было. На самом деле часть моего кода (приведенная ниже) не выполняется! Я помещаю скрипт сообщения об ошибках в виде внешнего файла и загружаю его в тег <head>
моей HTML-страницы. Он обернут вокруг анонимной функции без прослушивателя загрузки. Почему это не работает? Я не могу обдумать решение, поэтому я с радостью приму помощь. Спасибо.
О, чуть не забыл! Вот мой код (сокращенный до точек, имеющих отношение к вопросу):
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.info(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.info(window.onbeforeunload);
}
Я обнаружил проблему, это была ошибка моего сервисного работника, по какой-то причине вызвавшая дилемму.