web-dev-qa-db-fra.com

Filet de capture :: ERR_NAME_NOT_RESOLVED pour corriger les mauvais liens img

J'ai un blog qui existe depuis plus de 10 ans et j'aimerais y exécuter un morceau de Javascript qui attrape les liens brisés. J'utilisais:

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);

Mais cela n'attrape pas l'erreur de manière utile. Ce qui a été cassé, sur quelle ligne etc.

Error loading an image

JSON.stringify de l'objet d'erreur se traduit uniquement par "{"isTrusted":true}" ce qui est inutile. J'ai remarqué dans Chrome il y a e.path, mais pas dans Firefox. Existe-t-il un moyen dans Javascript de consigner des informations utiles sur les liens d'image rompus ou dois-je signaler des bogues sur les moteurs de navigation?

15
hendry

Ça marche. Cela n'empêchera pas l'erreur de s'afficher dans Chrome dans votre console, mais cela fonctionne. Ne soyez pas dérangé par le fait que vous VOYEZ toujours l'erreur dans Chrome. Votre code est en cours d'exécution et vous pouvez écrivez votre fonction mailme et elle s'exécutera. J'ai utilisé ce qui suit pour tester:

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);

sortie (Chrome)

 sortie (Firefox)

8
Richard Pressler

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

Lorsqu'une ressource (telle qu'un <img> ou <script>) ne se charge pas, un événement d'erreur utilisant l'interface Event est déclenché sur l'élément , qui a initié la charge, et le gestionnaire onerror () sur l'élément est invoqué. Ces événements d'erreur ne remontent pas à la fenêtre , mais (au moins dans Firefox) peuvent être gérés avec une seule fenêtre de capture. AddEventListener.

(Soulignant par moi.)

Donc, cela pourrait simplement être un problème de ce qu'il dit là pour Firefox, n'est pas le même pour Chrome.

5
CBroe