iframe 要素内に動的に script 要素を出力すると Internet Explorer が応答なしになる場合がある

JavaScript を利用して、iframe 要素に対し動的に script 要素を出力すると、Internet Explorer が応答なしになる場合があります。

この現象は、以下の 3 つのいずれの条件にも合致する場合に発生します。
条件 1 : document.write メソッドにて動的に script 要素を出力している
条件 2 : document.close メソッドにて出力を終了している
条件 3 : script 要素の出力対象が iframe 要素である

以下の例では、window.onload イベントで iframe 要素を動的に生成し、生成した iframe 要素に .js ファイルを参照する script 要素を出力します。以下の内容を html 形式で保存し、また、script 要素にて参照している script.js ファイルを準備します。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
</head>
<body>
<script type="text/javascript">
window.onload = function() {
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
var doc = iframe.contentDocument || iframe.contentWindow.document;
doc.write("<script src='script.js'>\x3c/script>");
doc.close();
}
</script>
</body>
</html>

この現象は、JavaScript 処理で document.write メソッドにて動的に script 要素を出力した場合に、Internet Explorer 内部で保持している文字数のカウントが不適切な状態となることに起因します。

Internet Explorer 側、または Web サイト側にて対処することができます。

  • Internet Explorer 側での対処策
    JavaScript を無効化することにより現象を回避することができます。ただし、この方法は JavaScript を利用しているすべての Web サイトに影響が生じます。

    1. [ツール] (メニューが表示されていない場合は [Alt] キーを押下) メニュー > [インターネット オプション] をクリックします
    2. [セキュリティ] タブをクリックします
    3. 対象のゾーンを選択し [レベルのカスタマイズ] ボタンをクリックします
    4. [アクティブ スクリプト] を "無効にする" に変更します
    5. 表示中のダイアログをすべて [OK] ボタンで閉じます

  • Web サイト側での対処策
    Web サイト側での対応策としては以下のいずれかの方法で回避することができます。

    方法 1. "原因" に記載の条件に一つでも合致しないよう Web サイトを構成する
    方法 2. 最新のドキュメント モードを利用するよう構成する

    以下のいずれかの方法でドキュメント モードを指定できます。
    最新のドキュメント モードを利用するには、X-UA-Compatible に IE=Edge を指定します。
    ・meta 要素を利用する
     <meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
    ・HTTP レスポンス ヘッダーを利用する
     X-UA-Compatible: IE=Edge



マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

X-UA-Compatible を利用したドキュメント モードの指定については以下をご参照ください。

2.1.2.4 X-UA-Compatibility Meta Tag and HTTP Response Header

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

フィードバックをお送りいただきありがとうございます!

×