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 も忘れてはならない重要な情報です。
- Windows7 SP1 のリリースは 2010 年 10 月 07 日。
これだけでは情報が足りないので… 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 プロパティが繰り返し更新されると、メモリ リークが発生する |
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!