私はASP.NETにiframeを使用する非常に完全なサイトを持っています。 jQueryUIダイアログを使用するようにダイアログを表示するために使用していた古いコントロールを変更するために取り組んでいます。また、IE9ですべてがうまく機能することを確認しています。
実際のところ、iframeに表示されているページにあるスクリプトはIE9では機能していません。どうして? Object、Array、Stringが定義されていないためです。他にもいくつか問題があるかもしれませんが、私はこれだけを見ました。
一部のダイアログでiframeの使用を停止する機会はありません(多くの理由があるため)。そして、IE8の互換性を強制するためにメタタグを使用したくありません。 IE9のこの醜いバグを修正する方法を知っている人はいますか?
ありがとう、ディエゴ
編集
ここに、完全な情報がいくつかあります。
jQuery UIダイアログを構成するために作成したプラグインの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);
注: ここ 理解に役立つ可能性のあるIE9のドキュメントがいくつかあります。共有してくれた@BenAmadaに感謝します。
毎日狂ったようになってほぼ一週間後、私はそれを見つけました。
IE9の問題は、特にiframeのjavascriptコードにはありません。 javascriptまたは任意のライブラリによって追加されたiframe内のjavascriptを使用しても(IE9を台無しにする可能性のあるjsライブラリとプラグインがたくさんあります)。
問題は、iframeまたは1つの祖先をDOMを介して移動する場合です。 IE9は、iframeに読み込まれたページのコードを、移動した回数だけ実行します。毎回(ただし最後のもの)、オブジェクト、文字列、配列などが未定義になります(その他のバグも)。
例:
var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe");
iframe.appendTo("body");
$("#myIframe").appendTo("form:eq(0)");
「www.example.com」のjavascriptコードは、上記のエラーで1回実行され、エラーなしで1回実行されます。
次のコードを使用すると、コードは1回だけ正しく実行されます。
var iframe = $("<iframe>").attr("src", "www.example.com").attr("id", "myIframe");
iframe.appendTo("form:eq(0)");
これが誰かがお尻のこの痛みを避けるのに役立つことを願っています、
ディエゴ
新しい要素を作成しない場合は、既存の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フレームワークはこの問題を修正する必要があります。
同様の問題が発生していますが、iframeがページから削除されるのではなく、ページに追加されます。それでも同じ問題があるようです。