Подтвердить что ты не робот

Ошибка в Internet Explorer 9 (не более ранние версии или другие браузеры) при включении jQuery в iframe

В основном у меня есть страница, которая запустила fancybox iframe. В этом iframe я также включаю jQuery. Но когда я тестирую его в Internet Explorer 9, он дает мне ошибку

Линия: 68\n Ошибка: "Объект" - undefined `

Эта ошибка находится в файле jquery-1.4.1.js, и строка, о которой идет речь, является второй строкой:

// Save a reference to some core methods
toString = Object.prototype.toString,
hasOwnProperty = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
indexOf = Array.prototype.indexOf;

который является последними строками var jQuery = function( selector, context ) {.

Нет проблем, если я нахожусь в режиме совместимости, никаких проблем в каких-либо других браузерах, просто в Internet Explorer 9 в режиме Internet Explorer 9 и в стандартах Internet Explorer 9. Если я игнорирую ошибку, я не вижу проблем с использованием любой версии jQuery.

Что, и что я могу сделать, чтобы исправить?

4b9b3361

Ответ 1

D'oh, подумал, что у меня есть последняя причудливая коробка. Оказывается, я имел 1.3.1, 1.3.4 исправляет эту проблему.

UPD (sompylasar): Фактически, это было исправлено в 1.3.2 (см. changelog). Я сравнил исходный код 1.3.2 с 1.3.1 и нашел следующую разницу, которая решает проблему:

content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');

где isIE6 оценивается как:

isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,

Этот фрагмент должен быть выполнен перед удалением iframe из DOM.

Ответ 2

Проблема была устранена, когда я удалил атрибут SRC из iframe, и я добавил onOpen событие в диалог jQuery:

open: function()
  {
    document.getElementById("mainFrame").src = "/login.aspx";
  }

Ответ 3

У меня была ТОЧНАЯ такая же проблема, но причина моя была другой. Я решил, что поделюсь здесь, если другие будут в одной лодке, как и я, особенно учитывая, что мне потребовалось около 4 часов, чтобы отследить...

На нашей главной странице был iframe, в результате которого его атрибут src дважды менялся за очень короткий промежуток времени (мы на самом деле загружали один и тот же src дважды случайно - один раз прямо в HTML, а затем снова на загрузку страницы через JavaScript). Я не уверен, почему Internet Explorer 9 дросселей, но я предполагаю, что фрейм был частично инициализирован его скриптами, когда src был установлен снова, что привело к тому, что движок JavaScript стал несчастливым. В любом случае я рад, что нашел это, так как мы не должны дважды загружать фрейм!

Однако настоящая причина, по которой Internet Explorer 9 умерла настолько плохо, является загадкой.

Ответ 4

Это связанная с этим проблема: IE9 выдает исключения при загрузке скриптов в iframe. Почему?

В Internet Explorer существует некоторая реальная проблема с такими глобальными объектами, как "Функция" и "Объект", являющаяся undefined в некоторых случаях, когда скрипты загружаются раньше (в разделе главы) iframe...

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

Из опыта я знаю, что эта проблема также существует в IE8, но, похоже, это было реже. Похоже, в IE9 он стал хуже...