Вот упрощенный пример проблемы:
Код: Выделить всё
// Catching errors
window.addEventListener('error', (ev) => {
// Sending error details to my backend
navigator.sendBeacon('/my-backend/on-error', JSON.stringify({
msg: ev.message,
stack: ev.error.stack
// TODO how to get id of the script or anything else that would allow to identify it?
}))
});
// Some external script producing inline scripts, which throw errors
const addScript = (index) => {
const script = document.createElement('script');
script.id = `script-${index}`;
script.textContent = `
if (Math.random() < 0.${index}) throw new Error('test');
`;
document.body.appendChild(script);
}
addScript(5);
addScript(6);
addScript(7);
Свойство filename пусто, target и srcElement являются окном. Трассировки стека одинаковы в случае этих трех скриптов, хотя у них немного разный код и идентификаторы.
Подробнее здесь: https://stackoverflow.com/questions/798 ... rror-event
Мобильная версия