2013-04-16 24 views
9

Ecco il frammento di colpevole estratto da una lib terzi:TypeError: Impossibile leggere la proprietà 'console' di null

function hasConsoleLogger() { 
    return window.console && window.console.log; 
} 

Niente di speciale, ma restituisce sorprendentemente: TypeError: Cannot read property 'console' of null

E 'eseguito in un browser context (Chrome) quindi nessuna roba Node.js non contenuta nella finestra.

Ho verificato potenziali potenziali dannosi delete window o window = null senza successo.

L'applicazione in cui si verifica questo errore viene eseguita con iFrame amichevoli e chiamate document.write().

Purtroppo non riesco a fornire alcun collegamento demo del problema.

Quindi suppongo che la mia domanda sia "Come potrebbe essere annullato o irraggiungibile per errore un oggetto finestra in un browser?"

+0

Ho solo cercato di fare: 'finestra = null;'; è fallito silenziosamente in Chrome. IMO, è abbastanza intelligente da impedire tale incarico. – SuperSaiyan

+0

è in ambito globale o all'interno di una funzione? – user2264587

risposta

4

Quando una finestra è chiusa, Chrome prima imposta window.console è quello di null, poi window.

Il seguente codice in modo affidabile riprodurre l'errore, con la creazione di una funzione che fa riferimento window da un contesto diverso:

var w = window.open('/'); 
// Using document.write to run code in the context of the other window 
w.document.write('<script>opener.func = function(){return window;};</script>'); 
w.close(); 
// Naive timer to wait for Garbage collection 
setTimeout(function() { 
    console.log(func() === null); // true 
}, 100); 
Problemi correlati