Ошибка IE9 - JavaScript работает только после однократного открытия инструментов разработчика.
Наш сайт предлагает пользователям бесплатную загрузку в формате PDF и имеет простую функцию «введите пароль для загрузки». Однако это не работает вообще в Internet Explorer.
Вы можете убедиться сами в этом примере .
Пропуск загрузки "makeuseof". В любом другом браузере работает нормально. В IE обе кнопки ничего не делают.
Самое любопытное, что я обнаружил, это то, что если вы открываете и закрываете панель инструментов разработчика с помощью F12, все это внезапно начинает работать.
Мы пробовали режим совместимости и ничего подобного.
Как мне заставить это работать в Internet Explorer?
javascript
internet-explorer
internet-explorer-9
Джеймс Брюс
источник
источник
gulp-strip-debug
. Он удаляет всеconsole.*
методы, отлично подходит для производственных сборок или тестирования в IE.console
с моим использованием angular и кэшированием запросов get. Смотрите ответы здесь и здесь для получения дополнительной информации.Ответы:
Похоже, вы можете иметь некоторый отладочный код в вашем JavaScript.
Опыт, который вы описываете, типичен для кода, который содержит
console.log()
любую другуюconsole
функциональность.console
Объект активируется только тогда , когда Dev панель открыта. До этого вызов объекта консоли приведет к тому, что о нем будет сообщено какundefined
. После того, как панель инструментов была открыта, консоль будет существовать (даже если панель инструментов впоследствии будет закрыта), поэтому ваши вызовы консоли будут работать.Есть несколько решений для этого:
Самый очевидный - это пройтись по своему коду, удалив ссылки на
console
. В любом случае, вы не должны оставлять подобные вещи в рабочем коде.Если вы хотите сохранить ссылки на консоль, вы можете заключить их в
if()
оператор или другое условие, которое проверяет, существует ли объект консоли, прежде чем пытаться его вызвать.источник
if(!console) {console={}; console.log = function(){};}
if(!console)
вызовет ту же ошибку - она должна прочитатьif(!window.console)
HTML5 Boilerplate имеет хороший готовый код для решения проблем с консолью:
Как отмечено в комментариях @ plus, последняя версия доступна на их странице GitHub.
источник
src
подкаталог: github.com/h5bp/html5-boilerplate/blob/master/src/js/plugins.jsВот еще одна возможная причина, помимо
console.log
проблемы (по крайней мере, в IE11):Когда консоль не открыта, IE выполняет довольно агрессивное кэширование, поэтому убедитесь, что для любых
$.ajax
вызовов илиXMLHttpRequest
вызовов для кэширования установлено значение false.Например:
Когда консоль разработчика открыта, кэширование менее агрессивно. Кажется, это ошибка (или, возможно, особенность?)
источник
Это решило мою проблему после того, как я внес в нее небольшие изменения. Я добавил следующее в мою HTML-страницу, чтобы исправить проблему IE9:
источник
Помимо
console
проблемы использования, упомянутой в принятом ответе и других, есть по крайней мере еще одна причина, по которой иногда страницы в Internet Explorer работают только с активированными инструментами разработчика.Когда инструменты разработчика включены, IE на самом деле не использует свой HTTP-кэш (по крайней мере, по умолчанию в IE 11), как в обычном режиме.
Это означает, что если у вашего сайта или страницы есть проблема с кэшированием (если она кэшируется больше, чем, например, - это было в моем случае), вы не увидите эту проблему в режиме F12. Поэтому, если javascript выполняет некоторые кэшированные запросы AJAX, они могут не работать должным образом в обычном режиме и нормально работать в режиме F12.
источник
Я думаю, это могло бы помочь, добавив это перед любым тегом javascript:
источник
try catch
обнаруживать, что переменная существует, плохая идея. Это не только медленно, но если у вас есть более одного оператора в вашем блоке try, вы можете получить исключение по другой причине. Не используйте это, по крайней мере, используйтеif (typeof console == 'undefined')
Если вы используете AngularJS версии 1.X, вы можете использовать службу $ log вместо непосредственного использования console.log.
https://docs.angularjs.org/api/ng/service/$log
Так что если у вас есть что-то похожее на
Вы можете заменить его на
Angular 2+ не имеет встроенного сервиса журналов .
источник
Если вы используете
angular
и т. Е.9, 10
Илиedge
используете:Чтобы полностью отключить
cache
.источник
Это случилось в IE 11 для меня. И я вызывал функцию jquery .load. Поэтому я сделал это по старинке и вставил что-то в URL, чтобы отключить кеширование.
источник
Я получил еще одну альтернативу для решений, предлагаемых runeks и todotresde, которая также позволяет избежать ошибок, обсуждаемых в комментариях к ответу Спадли :
Это немного неопрятно, но, с другой стороны, оно лаконично и охватывает все методы ведения журнала, описанные в ответе Рунекса , и у него есть огромное преимущество: вы можете открыть окно консоли IE в любое время и войти в систему.
источник
Мы столкнулись с этой проблемой в IE 11 в Windows 7 и Windows 10. Мы выяснили, в чем именно проблема, включив возможности отладки для IE (IE> Свойства обозревателя> вкладка «Дополнительно»> «Просмотр»> «Отключить» Отключить отладку сценариев (Internet Explorer) ). Эта функция обычно проверяется в нашей среде администраторами домена.
Проблема заключалась в том, что мы использовали
console.debug(...)
метод в нашем коде JavaScript. Предположение, сделанное разработчиком (мной), состояло в том, что я не хотел, чтобы что-то было написано, если клиентская консоль Developer Tools явно не была открыта. В то время как Chrome и Firefox, похоже, согласились с этой стратегией, IE 11 не понравился. Изменяя всеconsole.debug(...)
утверждения наconsole.log(...)
операторы, мы смогли продолжать регистрировать дополнительную информацию в клиентской консоли и просматривать ее, когда она была открыта, но в противном случае скрыть ее от обычного пользователя.источник
Я ставлю разрешение и исправляю свою проблему. Похоже, что запрос AJAX, который я поместил в свой JavaScript, не обрабатывался, потому что на моей странице была проблема с кэшем. если у вашего сайта или страницы есть проблема с кэшированием, вы не увидите эту проблему в режиме разработчика / F12. мой кэшированный JavaScript AJAX запрашивает, что он может работать не так, как ожидалось, и приводить к прерыванию выполнения, что у F12 не вызывает никаких проблем. Так что просто добавили новый параметр, чтобы сделать кеш ложным.
Похоже, что IE определенно нужно, чтобы это было ложным, чтобы AJAX и javascript-активность работали хорошо.
источник