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

Javascript код в iframes в IE9 не работает

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

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

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

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

Edit

Здесь есть информация, которая может быть helfull:

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

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);
4b9b3361

Ответ 1

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


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

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

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

Пример:

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)");

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

Диего

Ответ 2

Существует аналогичный способ достижения этого, используя существующий 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 должны решить эту проблему.

Ответ 3

У меня есть аналогичная проблема, однако iframe добавляется на страницу, а не удаляется из нее. По-прежнему возникают те же проблемы.