Ловля сети:: ERR_NAME_NOT_RESOLVED для исправления неверных ссылок img

У меня есть блог, который длится более 10 лет, и я хотел бы запустить кусок Javascript на нем, который ловит неработающие ссылки. Я использовал:

function trackError(e) {
    var ie = window.event || {};
    var errMsg = e.message || ie.errorMessage || "404 error on " + window.location;
    var errSrc = (e.filename || ie.errorUrl) + ': ' + (e.lineno || ie.errorLine);
    mailme([errMsg, errSrc]);
}

// Triggering an error in the console:
// You have to use something like setTimeout(function() { notThere(); }, 0);
window.addEventListener('error', trackError, true);

Но это не догоняет ошибку полезным способом. Что было нарушено, на какой строке и т.д.

Ошибка загрузки изображения

JSON.stringify объекта ошибки появляется только в "{"isTrusted":true}", что бесполезно. Я заметил, что в Chrome есть e.path, но не в Firefox. Есть ли способ в Javascript записывать полезную информацию о поврежденных ссылках на изображение или мне нужно записывать ошибки в браузерах?

Ответ 1

Он работает. Это не остановит ошибку в показе в Chrome на консоли, но она работает. Не беспокойтесь о том, что вы все еще видите ошибку в Chrome. Выполняется ваш код, и вы можете написать свою функцию mailme, и она будет выполнена. Для тестирования я использовал следующее:

index.html

<html>
<head>
    <script src="./app.js"></script>
</head>
<body>
    <img src="http://pictures.natalian.org/screenies/2004/sep/29/13:23:00/">
</body>
</html>

app.js

var mailme = function() {
    console.log('Caught!');
}

window.addEventListener('error', function(e) {
    var ie = window.event || {};
    var errMsg = e.message || ie.errorMessage || "404 error on " + window.location;
    var errSrc = (e.filename || ie.errorUrl) + ': ' + (e.lineno || ie.errorLine);
    mailme([errMsg, errSrc]);
}, true);

вывод (Chrome)

вывод (Firefox)

Ответ 2

https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers/onerror:

Когда ресурс (например, <img> или <script>) не загружается, событие ошибки, использующее интерфейс Event, запускается в элементе, инициировавшем загрузку, и onerror ( ) обработчик на элементе. Эти события ошибок не выходят за окном, но (по крайней мере, в Firefox) можно обрабатывать с помощью одного захвата window.addEventListener.

(Подчеркивание мною.)

Таким образом, это может быть просто проблема того, что он говорит там для Firefox, для Chrome это не то же самое.