2013-04-16 7 views
9

Вот виновный фрагмент извлеченный из третьей партии Lib:TypeError: Не удается прочитать свойство «консоли» нулевых

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

Ничего особенного, но это удивительно возвращается: TypeError: Cannot read property 'console' of null

Это выполняется в браузере контекст (Chrome), поэтому в Node.js не входит окно.

Я проверил потенциальные злонамеренные delete window или window = null без успеха.

Приложение, в котором происходит эта ошибка, выполняется с помощью дружественных iFrames и вызовов document.write().

К сожалению, я не могу предоставить ни одной демонстрационной ссылки проблемы.

Итак, я думаю, мой вопрос: «Как объект окна может быть аннулирован или недосягаем по ошибке в браузере?»

+0

Я просто попытался сделать: 'окна = NULL;'; он бесшумно провалился в Chrome. ИМО, он достаточно умен, чтобы предотвратить такое назначение. – SuperSaiyan

+0

находится в глобальном масштабе или внутри функции? – user2264587

ответ

4

Когда окно закрыто, хром сначала устанавливает window.console является null, то window.

Следующий код будет надежно воспроизвести ошибку, создав функцию, которая ссылается window из другого контекста:

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); 
Смежные вопросы