2013-04-16 19 views
9

Oto winny fragment uzyskiwany z lib cywilnej:TypeError: nie można odczytać właściwość „konsola” null

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

nic szczególnego, ale niespodziewanie powraca: TypeError: Cannot read property 'console' of null

Jest wykonany w przeglądarce kontekst (Chrome), więc nie ma żadnych plików Node.js, które nie są związane z okienkiem.

Sprawdziłem pod kątem potencjalnej złośliwości delete window lub window = null bez powodzenia.

Aplikacja, w której występuje ten błąd, jest uruchamiana za pomocą przyjaznych wywołań iFrames i document.write().

Niestety, nie mogę podać żadnego linku demo problemu.

Zgaduję, że moje pytanie brzmi: "W jaki sposób obiekt okna może zostać unieważniony lub nieosiągalny przez pomyłkę w przeglądarce?"

+0

Ja tylko starałem się zrobić: 'okna = null;'; po cichu nie działał w Chrome. IMO, jest wystarczająco sprytny, aby zapobiec takiemu przydziałowi. – SuperSaiyan

+0

jest w zasięgu globalnym lub w funkcji? – user2264587

Odpowiedz

4

Kiedy okno jest zamknięte, Chrome najpierw ustawia window.console na null, a następnie window.

Poniższy kod będzie wiarygodnie odtworzyć błąd, poprzez stworzenie funkcji, która odwołuje window z innym kontekście:

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); 
Powiązane problemy