IE объект мышления не загружен - PullRequest
1 голос
/ 10 марта 2011

У меня есть код, похожий на следующий:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
if (!window.lib) { alert("foo") }; //Triggers, despite library.js being loaded fine
lib.custLib = function(b) { ... }(lib.subLib); //Works fine, even though IE JUST said that window.lib wasn't loaded
</script>

И просто сделать все безумнее, после загрузки страницы, если я наберу

javascript:if(window.lib)alert("foo");

в адресной строке, предупреждение срабатывает, показывая, что загружен window.lib. Если вместо этого я наберу

javascript:if(!window.lib)alert("foo");

предупреждение НЕ срабатывает, подтверждая, что! Window.lib не имеет значения true.

Единственный вывод, к которому я могу прийти, это то, что каким-то образом library.js завершает выполнение, что-то среднее между первой проверкой существования window.lib и фактическим использованием lib.subLib при немедленном вызове сразу после объявления функции.

РЕДАКТИРОВАТЬ: Дополнительная информация ...

Я нашел обходной путь, но сначала несколько интересных вещей, на которые стоит обратить внимание.

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
alert(!window.lib) //True
if (!window.lib) {
  alert(!window.lib) //True
}
</script>

Сравнить с:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
alert(!window.lib) //False
</script>
<script>
if (!window.lib) {
  alert(!window.lib) //True
}
</script>

И обходной путь:

<script src="library.js"></script><!-- loads window.lib and lib.subLib -->
<script>
var foo = !window.lib;
</script>
<script>
if (foo) {
  alert(!window.lib) //Doesn't get triggered
}
</script>

Итак, суммируя, это похоже на ошибку в Internet Explorer. Обходной путь должен иметь отдельный блок скрипта, который устанавливает переменную в значение! Window.lib, и затем проверять эту переменную в следующем блоке скрипта, а не проверять напрямую! Window.lib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...