Ошибка в 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.
Что, и что я могу сделать, чтобы исправить?
Ответы
Ответ 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 он стал хуже...