Проблема с jQuery в Internet Explorer 8

Я пытаюсь заставить свои функции jQuery работать в IE8. Я загружаю библиотеку с серверов Google (http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js).

$(function(){}) никогда не вызывается. Вместо этого я получаю сообщение об ошибке Object expected. Я открыл программу разработчика и запустил typeof $ в консоли, и он оказался undefined.

Я пробовал заходить на другие сайты, которые, как я знаю, используют jQuery (jquery.com), и все они работают, есть ли что-то, чего мне здесь не хватает?


person Community    schedule 18.05.2009    source источник
comment
Не видя чего-либо на своей странице, это практически невозможно диагностировать. Можете ли вы определить, загружается ли и запускается ли библиотека jQuery до запуска вашего кода?   -  person ijw    schedule 18.05.2009
comment
Кажется, проблема в том, что jQuery действительно загружается. Я установил 3 точки останова в файле jQuery, и все они оказались недействительными, поскольку с этой строкой не связан исполняемый код.   -  person    schedule 18.05.2009
comment
Попробуйте изменить режим в IE8, чтобы проверить, работает ли режим IE7 или режим совместимости IE8. Вы можете сделать это с помощью инструментов разработчика.   -  person Jab    schedule 19.05.2009
comment
У меня были аналогичные проблемы при попытке загрузить jQuery из сценария (путем добавления тега сценария в заголовок) и вызова его в том же сценарии. Похоже, какая-то проблема с синхронизацией, когда jQuery не загружается вовремя. Я решил это, вставив статический тег скрипта в HTML-код.   -  person Tgr    schedule 08.05.2010
comment
У меня такая же проблема с загрузкой jQuery из Microsoft CDN - мое решение работает в Chrome, но не работает в IE8.   -  person Marek Grzenkowicz    schedule 27.05.2010
comment
Существует другой способ загрузки jQuery из Google CDN (он использует функцию google.load()) и согласно этот ответ он работает как в Firefox, так и в Internet Explorer.   -  person Marek Grzenkowicz    schedule 25.10.2010
comment
Также, как и в моем случае, возможной причиной является конфигурация усиленной безопасности Internet Explorer (ESC). Что по умолчанию включено на Windows 2008 Server. Чтобы отключить, посмотрите это.   -  person gerleim    schedule 03.01.2012


Ответы (20)


Напишите "var" перед переменными, когда вы их определяете. IE8 умирает, когда нет "var".

person asd    schedule 06.05.2010
comment
Без объявлений var работают в IE7 и IE9. Трудно понять, как MS могла пропустить такую ​​ошибку? - person Neo; 08.08.2011
comment
Спасибо, ребята, за ответ ... Ребята, вы сегодня мне голову спасли :) - person Ravi; 21.05.2012
comment
Извините, но это неправда. Мы используем var для определения переменной с локальной областью видимости. Если вы определяете переменную без var, она фактически создает свойство с глобальной областью видимости, то есть как свойство объекта окна. См. Этот вопрос для получения дополнительной информации: stackoverflow.com/questions/1470488/ - person James McCormack; 05.09.2012
comment
Ты спас мне день. Спасибо! Это фактически решило мою проблему с IE10. Теперь мой мобильный сайт на jQuery отлично работает во всех основных браузерах :) - person casaout; 02.01.2013

Исправление:

Проверьте свой тег включения сценария, использует ли он

type="application/javascript" src="/path/to/jquery" 

изменить на

type="text/javascript" src="/path/to/jquery" 
person Richard    schedule 15.12.2010
comment
Это исправление и для меня - person Blake Niemyjski; 01.06.2015

У меня была аналогичная проблема. Все работало в IE6, Firefox и IE8, работающих в режиме совместимости с IE7; но не в «нормальном» IE8. Мое решение заключалось в том, чтобы поместить этот код в заголовок

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

Что касается того, почему jquery не работает в IE8, мне неясно.

person JeffryHouser    schedule 15.10.2009
comment
Работает, но я все еще не понимаю, почему он вообще сломался! - person TimS; 20.09.2010
comment
это ужасно! это не решает проблемы; он просто взламывает это и, вероятно, создаст массу других проблем. (Режим совместимости с IE7 на самом деле не совсем то же самое, что и IE7, в нем есть свои собственные ошибки, причуды и сбои, которых нет ни в обычном IE7, ни в IE8) - person Spudley; 25.10.2010
comment
Если у вас есть лучшее решение, поделитесь, пожалуйста. Многие способы заставить что-то работать в IE - это взломы. - person JeffryHouser; 25.10.2010
comment
Если это взлом, то он рекомендован Microsoft. msdn.microsoft.com/en-us/library /cc288325(v=vs.85).aspx - person eric.christensen; 15.12.2010
comment
Поскольку кто-то только что проголосовал против этого; расскажите, пожалуйста, почему, и выделите свой предпочтительный подход. - person JeffryHouser; 16.12.2010
comment
У меня была эта проблема, и я решил ее с помощью решения Ричарда выше. Я изменил все мои ‹script type = application / javascript ... на‹ script type = text / javascript, включая мою ссылку jquery на google cdn, и IE8 начал работать. Для этого мне не пришлось переводить всю страницу в режим совместимости. - person Vineel Shah; 01.11.2011
comment
Это позволяет избежать проблемы, перейдя в режим iE7. Посмотрите другие решения на этой странице для проблем с iE8. - person thetoolman; 14.06.2012
comment
В вашу пользу: OP не публиковал никаких подробностей о своих проблемах, поэтому нужно было только догадываться. Но в целом предлагаю перейти на IE compat. режим - очень плохая вещь. - person wiesion; 11.06.2015
comment
@wiesion Почему это плохо? - person JeffryHouser; 16.06.2015
comment
IE7 имеет множество других проблем по сравнению с IE8 (который уже несколько приближается к стандартам W3C по полному контрасту с IE7), и, кроме того, совместимость с IE7. mode не дает надежно того же результата, что и настоящий IE7 (означает, что вы будете ориентироваться на 3 браузера, а не на 2). Для быстрого обзора: smashingmagazine.com/2009/10/14/ - person wiesion; 17.06.2015

Решение - обновить jQuery до последней версии. У меня была такая же проблема, и я обновился до 1.4.2, и все снова отлично работает в IE8.

Кажется, он полностью обратно совместим со всем материалом jQuery 1.3.2, который я сделал, так что никаких жалоб здесь!

person Peter Burlingham    schedule 11.06.2010
comment
У меня проблема с 1.8, что бы это ни значило. - person Josh; 14.03.2013

У меня была эта проблема, и я безуспешно пробовал решения, упомянутые здесь.

В конце концов я понял, что связываюсь с версией скрипта Google CDN, используя http URL, в то время как страница, на которой был внедрен скрипт, была https page.

Это привело к тому, что IE не загружал jquery (он запрашивает пользователя, хотят ли они загружать только защищенный контент). Изменение URL-адреса Google CDN для использования схемы https устранило проблему для меня.

person sheltond    schedule 19.11.2010
comment
я знаю, что это старый пост, но вы можете посмотреть this - в нем есть раздел о том, как Google теперь рекомендует использовать его CDN (что избавляет от этой проблемы) - person stef; 22.01.2013

Некоторые люди, наткнувшиеся на этот пост, могут столкнуться с этой проблемой с jquery и IE8, потому что они используют> = jQuery v2. Используйте этот код:

<!--[if lt IE 9]>
    <script src="jquery-1.9.0.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0.js"></script>
<!--<![endif]-->
person stuartdotnet    schedule 27.08.2014

Если вы используете HTTPS на своем сайте, вам потребуется загрузить библиотеку jQuery с https-сервера Google. Попробуйте это: https://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js (или последний https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js)

person lhoess    schedule 26.04.2011

jQuery не загружается, скорее всего, это не относится к IE8. Проверьте путь в вашем jQuery include. утверждение. Или еще лучше, используйте следующее для CDN:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>
person cgp    schedule 18.05.2009
comment
Все работает в firefox, safari и chrome. Могу сказать, что библиотека загружается, а не выполняется. Я установил точку останова на строке в файле jquery, и он пришел к выводу, что с этой строкой нет исполняемого кода. - person ; 18.05.2009

Я исправлял шаблон, созданный кем-то другим, кто забыл включить doctype.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Если вы не заявляете, что doctype IE8 делает странные вещи в режиме Quirks.

person Hone Watson    schedule 07.12.2010
comment
Я пробовал все предложения выше ... изменив тип документа (из HTML5 ‹! DOCTYPE html›, наконец, он заработал (в Dev Tools он показывает, что класс элемента действительно меняется, но я предполагаю, что движок рендеринга IE8 не обновляется) при изменениях в DOM для нераспознанных типов документов). - person Stephen M. Harris; 07.08.2013

Ошибка Object expected возникает, потому что JQuery не загружен. Это происходит из-за безопасности браузера (обычно IE), который не позволяет выполнять внешний исходный код javascript. Вы можете исправить эту проблему:

  • 1: изменение уровня безопасности браузера, чтобы разрешить выполнение внешнего кода javascript. Вы можете найти как это сделать здесь

OR

  • 2: Скопируйте и вставьте исходный код jquery на свою веб-страницу, чтобы он не рассматривался как внешний скрипт.

Я предпочитаю первое решение.

person zelmarou    schedule 17.08.2011

Событие onload не всегда работает в IE7 / 8 в <head> ... </head>

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

  <script>
    window.onload();
  </script>
</body>
person Andy Piddock    schedule 21.10.2010

Может вы вставляете два скрипта, должно работать.

<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>  
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">/script> 
person Vadim Sluzky    schedule 16.09.2010

Это устранило мою проблему в IE8:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

При запуске на локальном хосте мне пришлось изменить https: // на http: //

Если я попытаюсь перейти по защищенной ссылке, я получаю дружественное предупреждение Internet Explorer не может отобразить веб-страницу.

Всегда старайтесь сначала загрузить текстовые сценарии в браузере, если есть проблемы!

person lenny    schedule 01.05.2011

У меня были такие же проблемы.

Я решил это, убедившись, что IE8 неправильно настроен для доступа к URL-адресу SRC.

Я изменил это, работает нормально.

person Community    schedule 05.08.2009

Возможно, вы включили inPrivate Filtering на?

person Eduardo Molteni    schedule 18.05.2009

Я была такая же проблема. Решением было добавить ссылку на файл JQuery в качестве надежного сайта в IE.

person Carlos Blanco    schedule 13.10.2010

Я думаю, что у вас такая же проблема, как и у меня:

Message: Permission denied
Line: 13
Char: 27021
Code: 0
URI: http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.3.2.min.js

Из-за перекрестной ссылки на домен. Попробуйте разместить jquery.js в том же домене.

person Vanja    schedule 18.04.2011

Короче говоря, это из-за механизма синтаксического анализа IE8.

Угадайте, почему у Microsoft проблемы с работой с новыми тегами HTML5 (например, «section»)? Это потому, что MS решила, что они не будут использовать обычный синтаксический анализ XML, как остальной мир. Да, верно - они провели тонну пропаганды XML, но в конце концов они прибегли к «глупому» механизму синтаксического анализа, который ищет «известные теги» и портит все, когда появляется что-то новое.

То же самое касается IE8 и проблемы с jquery с "load", "get" и "post". И снова Microsoft решила «идти своим путем» с версией 8. Надеясь, что они решат (d) эту проблему в IE9, единственный текущий вариант - вернуться к синтаксическому анализу IE7 с <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />.

Ну что ж ... какой сюрприз, что Microsoft снова заставила нас публиковать материалы на форумах. ;)

person e-sushi    schedule 12.03.2011

В моем случае решение заключалось в том, чтобы убрать любые специальные символы из URL-адреса, к которому вы пытаетесь получить доступ. У меня там были тильда (~) и символ процента, и вызов $ .get () потерпел неудачу без предупреждения.

person jorisw    schedule 17.08.2012

В ПОРЯДКЕ! Я знаю, что загружается jQuery. Я знаю, что jQuery.textshadow.js загружается. Я могу найти оба сценария в Инструментах разработчика.

Странная часть: этот код работает в области контента, но не в баннере. Даже с выделенным fixIE.css. И это работает, когда я вставляю css в строку. (Это, конечно, портит FireFox.)

Я даже безуспешно вставил условный диапазон IE вокруг текстового поля в баннере.

Я не обнаружил разницы и имел одинаковые ошибки как в jquery-1.4.2.min.js, так и в jquery-1.2.6.min.js. jquery.textshadow.js был загружен с сайта jQuery при попытке найти решение этой проблемы.

Это не публикуется на Сайте

person Kyle    schedule 08.05.2010