IE の メモリリーク不具合 まとめ

0 件のコメント

Internet Explorer のメモリーリークは昔から本当に困りものです。。 システムテスト工程で言われた日にはどうしていいものか…。

そんな困りものの IE のメモリーリーク関連の情報をまとめをしてみます。 (ちなみに…Windows 7 を前提で話を進めさせてもらいます。つまるとこ IE8 以上。いまさら XP なんて見たくないし www)

書いてはいけない JavaScript コード

(※サンプルコードは こちら をご参照ください。)

IE8 以上において、 KB情報 からみる書いてはいけない JavaScript コードは以下の通りです。 (パッチが当てられる場合は関係ありません。)

  • innerHTML プロパティを頻繁に書き換える
  • frameset 要素を使う
  • window.open した先のウィンドウ内で循環参照を含む iframe 要素を使う
  • window.createPopup したあと、作成したウィンドウ内で window.createStyleSheet を用いてスタイルシートを追加する
  • 循環参照があるスクリプトで、onload、onerror、onunload イベントハンドラーを接続する
  • iframe から モーダルダイアログ を開いて、iframe を閉じる

基本的に KB が使えるなら、使った方がラクだと思います。 でも、場合によっては使えない事情もあるかと思います。 そんなときは、上記に書かれている内容は絶対やってはいけないコードになります。

一覧をみてると「循環参照だけは止めとけ」という話みたいです。。 まぁ、そりゃそうなんですがね…と思わなくもないですが。

これ以降は、上記 "書いてはいけない JavaScript コード" に関する詳細を記載していきます。

IE リリース日

まずは基本情報として、IE のリリース日です。

  • Internet Explorer 8 のリリースは 2009 年 3 月 20日。
  • Internet Explorer 9 のリリースは 2011 年 4 月 26 日。
  • Internet Explorer 10 のリリースは 2013 年 2 月 26 日。
Service Pack リリース日

それから、Service Pack も忘れてはならない重要な情報です。

  • Windows7 SP1 のリリースは 2010 年 10 月 07 日。
IE の メモリーリーク に関する KB まとめ

これだけでは情報が足りないので… IE に関連するセキュリティパッチからメモリーリークに関するKBを調査、以下にまとめます。 このリストは 2013 年 4 月 20 日 までの調査結果になります。 最新の情報は マイクロソフト セキュリティ情報 で検索してください。 (一部、日本語訳を修正しています。。)

日付 情報番号 KB 概要
2012/08/14 MS12-052 KB2707082 Windows 7 または Windows Server 2008 R2 を搭載しているコンピューターに Internet Explorer 8 または Internet Explorer 9 をインストールすると、JScript スクリプト エンジンのインスタンスでメモリ リークが発生する
2012/06/12 MS12-037 KB2695422 Internet Explorer 8 の iframe 内でモーダル ダイアログ ボックスが開いた際にメモリ リークが発生することがある
KB2703157 Windows 7 ベースまたは Windows Server 2008 R2 ベースのコンピューターでアプリケーションが WinHttpGetProxyForUrl 関数を呼び出す際にメモリ リークが発生する
2012/02/14 MS12-010 KB2711084 ウィンドウ オブジェクト をからめた循環参照を含む ウィンドウ または タブ を開いて閉じると、Internet Explorer 8 でメモリ リークが発生する
2011/06/14 MS11-050 KB2539352 window.createPopup メソッドと document.createStyleSheet メソッドが Internet Explorer 7 または Internet Explorer 8 で使用される場合のメモリ リーク
2010/12/14 MS10-090 KB2437070 アプリケーションで WinINet API を使用してサーバーに HTTPS 要求を送信すると、メモリ リークが発生する
KB975736 iframe に循環参照が含まれる Web ページを開くと、メモリ リークが発生する
2010/08/10 MS10-053 KB982094 Internet Explorer 8 で Web ページのフレームの内容が繰り返し再読み込みされるとメモリ リークが発生する
2010/03/30 MS10-018 KB975623 Internet Explorer 8 である要素の InnerHTML プロパティが繰り返し更新されると、メモリ リークが発生する