Ловля сети:: 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 это не то же самое.