2016-04-09 4 views
11

Ho un blog da oltre 10 anni & Vorrei eseguire su di esso un pezzo di JavaScript che rilevi collegamenti interrotti. Stavo usando:Rete di cattura :: ERR_NAME_NOT_RESOLVED per il fissaggio di link img errati

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

Ma non è la cattura l'errore in un modo utile. Ciò che è stato rotto, il quale linea ecc

Error loading an image

JSON.stringify dei risultati oggetto errore solo in "{"isTrusted":true}" che è inutile. Ho notato che in Chrome c'è lo e.path, ma non in Firefox. C'è un modo in Javascript per registrare informazioni utili sui collegamenti di immagine danneggiati o ho bisogno di file bug sui motori dei browser?

+0

Quando/dove stai tentando di recuperare le informazioni all'interno dei collegamenti interrotti? Ad esempio, sono 'tag' 'o stai facendo un po 'di ajax? –

+0

img tag https://natalian.org/2004/09/29/london/ – hendry

risposta

4

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

Quando una risorsa (ad esempio un <img> o <script>) non viene caricato, un evento di errore utilizzando l'interfaccia L'evento viene attivato presso l'elemento, che ha avviato il carico, e l'onerror () viene richiamato l'handler sull'elemento. Questi eventi di errore non sono visibili fino alla finestra, ma (almeno in Firefox) possono essere gestiti con una finestra di acquisizione singola.addEventListener.

(messa in evidenza da me.)

quindi potrebbe essere semplicemente una questione di quello che dice lì per Firefox, non è lo stesso per Chrome.

+0

Quindi funziona solo con Firefox, ma non con Chrome? – hendry

+0

Mi sembra che Firefox lo abbia implementato in questo modo, anche se contraddice le specifiche (se tali eventi non si rivelano speculari, non dovresti riuscire a catturarli sulla finestra). – CBroe

+0

Il parametro 'true' passato a 'addEventListener' sovrascrive la propagazione dell'evento. Significa fondamentalmente "non permettere a nulla sotto di me di prendere questo evento". Vedi: [https: //developer.mozilla.org/it-it/docs/Web/API/EventTarget/addEventListener] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener) –

7

Sta funzionando. Non si fermerà l'errore di mostrare in Chrome nella tua console ma funziona. Non essere disturbato dal fatto che continui a VEDERE l'errore in Chrome. Il tuo codice è in esecuzione e puoi scrivere la tua funzione mailme e verrà eseguita. Ho usato il seguente di prova:

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

uscita (Chrome)

uscita (Firefox)

+2

Fondamentalmente non visualizza nulla sull'errore in nessuno dei due browser. Questo è davvero il problema che penso. – hendry

+1

In realtà, l'ho testato in Chrome (da 'console.log (argomenti)') e l'evento di errore contiene non solo il codice di errore, ma anche il percorso dell'elemento che ha causato l'errore e l'URL che lo ha causato. –

+0

È possibile che la richiesta iniziale per il contenuto sia stata rifiutata dal server a causa della mancanza di accesso prima dell'handshake iniziale? Puoi provare ad aggiungere tag di localizzazione al tuo web.config per consentire a tutti gli utenti di una determinata directory come ~/Content/images. –