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


78

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

$(function(){})Ніколи не викликається. Натомість я отримую повідомлення про помилку Object expected. Я відкрив розробник і запустив typeof $у консолі, і він вийшов як undefined.

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


7
Не побачивши чогось на своїй сторінці, це майже неможливо діагностувати. Чи можете ви сказати, чи завантажується та запускається бібліотека jQuery до того, як запуститься ваш код?
ijw

Здається, проблема в тому, що jQuery фактично завантажується. Я встановив 3 точки зупинки у файлі jQuery, і всі вони виявились недійсними, оскільки з цим рядком не пов’язаний виконуваний код.

Спробуйте змінити режим на IE8, щоб побачити, чи працює режим IE7 або режим IE8 Compat. Ви можете зробити це за допомогою Інструментів розробника.
Яб,

У мене були подібні проблеми при спробі завантажити jQuery зі сценарію (додавши тег сценарію в заголовок) і викликавши його в тому ж сценарії. Виглядало як якась проблема з синхронізацією, оскільки jQuery не завантажувався вчасно. Я вирішив це, застосувавши статичний тег сценарію в HTML-коді.
Tgr

У мене така сама проблема із завантаженням jQuery з CDN від Microsoft - моє рішення працює в Chrome, але не працює в IE8.
Marek Grzenkowicz

Відповіді:


42

Напишіть "var" перед змінними, коли ви їх визначаєте. IE8 вмирає, коли немає "var".


Без декларацій "var" працюють в IE7 та IE9. Важко зрозуміти, як MS може пропустити таку помилку?
Нео,

Дякую хлопці за відповідь ... Ви, хлопці, сьогодні врятували мені голову :)
Раві,

3
Вибачте, але це неправда. Ми використовуємо varдля визначення змінної з локальним обсягом. Якщо ви визначаєте змінну без var, вона фактично створює властивість із загальним обсягом, тобто як властивість віконного об'єкта. Перегляньте це запитання для отримання додаткової інформації: stackoverflow.com/questions/1470488/…
James McCormack

Ти врятував мій день. Дякую! Це насправді вирішило мою проблему з IE10. Тепер мій мобільний веб-сайт jQuery працює як привабливість у всіх основних браузерах :)
casaout

39

Виправлення:

Перевірте тег включення вашого сценарію, чи використовується він

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

перейти

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

Це виправлення і для мене
Блейк Ніємийський

38

У мене була подібна проблема. Справа працювала в IE6, Firefox та IE8, що працюють у режимі сумісності IE7; але не в "звичайному" IE8. Моє рішення було розмістити цей код у заголовку

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

Щодо того, чому jquery не працює в IE8, мені незрозуміло.


19
це жахливо! це не вирішує проблему; він просто хакне його, і це, мабуть, створить цілу купу інших проблем. (Режим сумісності з IE7 насправді не повністю збігається з IE7, у ньому є всі помилки, дивацтва та збої, які не відображаються ні в звичайному IE7, ні в IE8)
Spudley

33
Якщо у вас є краще рішення, будь ласка, поділіться. Багато підходів до того, як щось працювати в IE, є хакерськими.
JeffryHouser

8
Якщо це хакерство, воно рекомендується корпорацією Майкрософт. msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx
eric.christensen

11
Оскільки хтось просто проголосував за це; будь ласка, розкажіть нам, чому, і, будь ласка, виділіть ваш улюблений підхід.
JeffryHouser

7
У мене була ця проблема, і я вирішив її рішенням Річарда вище. Я змінив усі свої <script type = "application / javascript" ... на <script type = "text / javascript", включаючи посилання jquery на cdn google, і IE8 почав працювати. Мені не потрібно було перекидати всю сторінку в режим сумісності, щоб це зробити.
Vineel Shah

12

Рішенням є оновлення до останньої версії jQuery. У мене була точно така ж проблема і оновлено до 1.4.2, і все це знову працює нормально в IE8.

Здається, він повністю сумісний із усіма матеріалами jQuery 1.3.2, які я також робив, тому скарг тут немає!


3
Я маю цю проблему з 1.8, що б це не означало.
Джош

10

У мене була ця проблема, і я без успіху спробував згадані тут рішення.

Зрештою, я зрозумів, що посилаюся на версію скрипта Google CDN, використовуючи http URLсторінку, що вбудовує сценарій https page.

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


я знаю, що це стара публікація, але ви можете поглянути на це - у ньому є розділ про те, як Google тепер рекомендує використовувати його CDN (який позбавляє цю проблему)
stef

8

Деякі люди, натрапляючи на цю публікацію, можуть отримати цю проблему з 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]-->


6

jQuery не завантажується, це, швидше за все, не стосується IE8. Перевірте шлях на вашому jQuery include. заява. Або ще краще, використовуйте наступне для CDN:

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

3
Все працює у firefox, сафарі та хромі. Я можу сказати, що бібліотека завантажується, але не виконується. Я встановив точку зупинки на рядку у файлі jquery, і він вийшов, сказавши, що з рядком немає жодного виконуваного коду.

5

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

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

Якщо ви не заявляєте, doctype IE8 робить дивні речі в режимі Quirks.


Я спробував кожну пропозицію вище ... зміна типу документа (з "<! DOCTYPE html>" HTML5 нарешті змусило його працювати. (У Dev Tools це показує, що клас елемента насправді змінюється, але я здогадуюсь, що механізм візуалізації IE8 не працює) t оновлення після внесення змін до DOM для невизнаних доктіпів)
Стівен М. Гарріс

4

Помилка Object expectedвикликана, оскільки Jquery не завантажено. Це відбувається через безпеку браузера (зазвичай IE), яка не дозволяє виконувати зовнішній вихідний код JavaScript. Ви можете виправити цю проблему, виконавши:

  • 1: Зміна рівня безпеки браузера, щоб дозволити виконувати зовнішній код JavaScript. Ви можете знайти, як це зробити тут

АБО

  • 2: Скопіюйте і вставте вихідний код jquery на свою веб-сторінку, щоб він не розглядався як зовнішній скрипт.

Я віддаю перевагу першому рішенню.


4

Подія завантаження не завжди працює на IE7 / 8 в<head> ... </head>

Ви можете змусити його додати скрипт завантаження в кінці сторінки перед тегом, як показано нижче.

  <script>
    window.onload();
  </script>
</body>

2

Можливо, ви вставляєте два сценарії, це має працювати.

<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> 

2

Це виправило мою проблему в IE8:

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

Запустивши на localhost, мені довелося змінити https: // на http: //

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

Завжди намагайтеся завантажувати текстові скрипти в браузер, якщо є проблеми!


2

У мене були ті самі проблеми.

Я вирішив це, перевіривши, що IE8 неправильно налаштовано для отримання URL-адреси SRC.

Я змінив це, це працює правильно.



1

У мене була та сама проблема. Рішенням було додати посилання на файл JQuery як надійний сайт в IE.


1

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

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

Через міждоменне посилання. Спробуйте розмістити jquery.js на тому ж домені.


0

Коротше кажучи, це через двигун синтаксичного аналізу IE8.

Здогадайтеся, чому Microsoft також має проблеми з роботою з новими тегами HTML5 (наприклад, "розділ")? Це тому, що MS вирішили, що вони не використовуватимуть регулярний аналіз XML, як і весь світ. Так, це правильно - вони пропагували тонну XML, але врешті-решт вони знову потрапляють на "дурний" механізм синтаксичного аналізу, шукаючи "відомі теги" і псують речі, коли з'являється щось нове.

Те саме стосується IE8 та проблеми з jquery з "завантажити", "отримати" та "опублікувати". Знову ж таки, Microsoft вирішила "пройти власний шлях" з версією 8. Сподіваючись, що вони вирішать (d) це в IE9, єдиний поточний варіант - повернутися до розбору IE7 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />.

Ну ну ... який сюрприз, коли Microsoft знову змусила нас розміщувати матеріали на форумах. ;)


0

Рішенням у моєму випадку було вилучення будь-яких спеціальних символів із URL-адреси, до якої ви намагаєтесь отримати доступ. У мене була тильда (~) та символ відсотка, і виклик $ .get () не вдався мовчки.


0

ГАРАЗД! Я знаю, що 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 під час спроби знайти вирішення цієї проблеми.

Це не розміщено на веб-сайті

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.