Javascript код в iframes в IE9 не работает - PullRequest
25 голосов
/ 01 апреля 2011

У меня очень полный сайт в ASP.NET, который использует фреймы. Я работаю над изменением старого элемента управления, который мы использовали для отображения диалогов, чтобы использовать диалоги пользовательского интерфейса jQuery. Я также проверяю, все ли хорошо работает в IE9.

Дело в том, что скрипт на страницах, показанных в iframes, не работает в IE9. Зачем? Потому что Object, Array и String не определены. Могут быть и другие проблемы, я видел только эти.

Нет шансов (из-за множества причин) прекратить использование фреймов в некоторых диалогах. И я бы предпочел не использовать метатег для принудительной совместимости IE8. Кто-нибудь знает, как исправить эту ужасную ошибку в IE9?

Спасибо, Диего

Редактировать

Вот некоторая информация, которая может быть полезной:

jQuery-код для iframe в плагине, который я сделал для настройки диалога jQuery UI:

options.content = $("<iframe>")
    .attr("src", options.intSrcIframe)
    .attr("frameborder", 0)
    .attr("scrolling", options.intIframeScrolling)
    .css("background-color", options.intBgColorIframe)
    .attr("height", "100%")
    .attr("width", "100%");

_this.html(options.content);

Ответы [ 3 ]

27 голосов
/ 07 апреля 2011

Примечание: здесь есть некоторая документация от IE9, которая может помочь понять. Спасибо @Ben Amada за то, что поделились им.


После почти недели сумасшествия день за днем ​​я узнал об этом.

Проблема с IE9 не связана с кодом javascript в iframes. Даже с javascript в iframes, добавленным javascript или какой-либо библиотекой (у меня есть много библиотек js и плагинов, которые могут испортить IE9).

Проблема в том, что вы перемещаете iframe или одного предка через DOM. IE9 будет выполнять код на странице, загруженной в iframe, столько раз, сколько вы делаете. Каждый раз (но последний) будет иметь неопределенные значения Object, String, Array и других (и других ошибок).

Пример:

var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe");
iframe.appendTo("body");
$("#myIframe").appendTo("form:eq(0)");

Код JavaScript в "www.example.com" будет выполнен один раз с ошибкой, описанной выше, а затем один раз без ошибок.

С помощью следующего кода код будет выполнен только один раз и правильно:

var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe");
iframe.appendTo("form:eq(0)");

Надеюсь, это поможет кому-то избежать этой боли в заднице,

Diego

3 голосов
/ 01 августа 2011

Существует аналогичный способ достижения этого с использованием существующего iframe, если вы не создаете новый элемент.

$(function () {
    var iframeSrc = $("#iframeid").attr("src"); // capture target URI
    $("#iframeid").attr("src", "about:blank"); // delay loading until we reposition in the DOM
    $("#iframeid").appendTo("#newparent").attr("src", iframeSrc); // reposition, load iframe by setting src
});

В IE9 или jquery framework необходимо исправить эту проблему.

0 голосов
/ 12 октября 2012

У меня похожая проблема, однако iframe добавляется на страницу, а не удаляется с нее. Кажется, все еще возникают те же проблемы.

...