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);
Ответы
Ответ 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 добавляется на страницу, а не удаляется из нее. По-прежнему возникают те же проблемы.