Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

EdgeのIEモードはIEなのか?

Windows 11 Pro 21H2 (22000.282)で確認。

Microsoftは何と言っているか?

「従来のサイトには、Internet Explorer 11 (IE11) から Trident MSHTML エンジンを使用します」と言っている*1IEモードはIE 11であると言える。

WindowsからIE 11をアンインストールするとIEモードはどうなるか?

  • Windows 10の場合、「Windowsの機能の有効化または無効化」に「Internet Explorer 11」がいる。この設定でIEを無効化していると、EdgeのIEモードは利用できなくなる*2IE 11をインストールしていないとIEモードは使えないわけで、IEモードはIE 11であると言える。
  • Windows 11の場合、「Windowsの機能の有効化または無効化」に「Internet Explorer 11」がない。そのため、Windows 10と同様の方法でIEモードを無効化することはできない。IE 11をインストールしている・いないに関わらずIEモードは使えるわけで、IEモードはIE 11であるとは言えない。

f:id:satob:20211107232511p:plain f:id:satob:20211107232520p:plain f:id:satob:20211107232529p:plain

IEモードのWindows上どのようなプロセスで動いているか?

Edgeのプロセスモデル*3は、Chromeプロセスモデル*4と同様、各種のプロセスが組み合わさって動いている。

EdgeのIEモードでウェブサイトを開き、タスクマネージャーを開くと"Microsoft Edge"の下に"iexplorer.exe"がいる。

f:id:satob:20211107232543p:plain

また、そのEdgeのプロセス上でブラウザータスクマネージャーを見ると、IEのウィンドウはいない。つまり、EdgeがMSHTML.dllを用いてレンダリングを行うプロセスを自身の管理下に置いているわけではないと言える。

f:id:satob:20211107232611p:plain

上記から、Edgeのプロセスとは別にIEのプロセスが動いており、EdgeのプロセスとIEのプロセスとは何らかの形で連携している*5と思われる。IEモードはIE 11かどうか分からないが、少なくともEdgeの直接的な管理下にはない。

iexplorer.exeでIEだけを起動できるか?

EdgeでIEモードを使っているときに、タスクマネージャーの「コマンドライン」に表示されているオプション(-dualengineadapter, -dualenginepipeなど)を指定して、iexplore.exeを起動してみた。

PS C:\> & "C:\Program Files\Internet Explorer\iexplore.exe" -dualengineadapter="C:\Program Files (x86)\Microsoft\Edge\Application\95.0.1020.40\dual_engine_adapter_x64.dll" -dualenginepipe=6744 APPID:MSEdge

の場合、IEでなくEdgeが起動し、DNS_PROBE_FINISHED_NXDOMAINエラーが表示された。

f:id:satob:20211107232724p:plain

PS C:\> & 'C:\Program Files (x86)\Internet Explorer\iexplore.exe' SCODEF:18192 CREDAT:75010 APPID:MSEdge /prefetch:2

の場合、IEのプロセスは起動しない。$?True$LASTEXITCODEは空になる。cmd.exeから起動した場合の%ERRORLEVEL%は0。

Windows 11のEdgeのIEモードでもF12開発者ツールを開けるか?

IEモードでF12を押すとMicrosoft Edge開発者ツールのペインが開くが、Microsoft Edge開発者ツールの各タブは使えない(非活性になっている)。Microsoft Edge開発者ツールの中央に「Developer Tools are not available in Internet Explorer mode. To debug the page, open the page in IEChooser.」というメッセージが表示される。

C:\Windows\System32\F12\IEChooser.exeを起動し、「デバッグするターゲットの選択」からIEモードで開いているデバッグ対象のページを選択すると、F12開発者ツールが起動する。IE 11ではIEChooser.exeは不要だったわけで、その点でIEモードはIE 11とは異なる。

IE 11のないWindows 11でも、IEコンポーネントブラウザは使える?

使える。Donut RAPT 135 (Unicode)で確認。

f:id:satob:20211107232743p:plain

IEコンポーネントブラウザのタスクマネージャーで表示すると、IEコンポーネントブラウザ本体のプロセスだけが表示される。EdgeのIEモードのように、ブラウザ本体の下にサブプロセスとしてiexplore.exeが存在する構成にはならない。 IEモードはIEコンポーネントブラウザとは異なる構成で動作していると言える。

LCIEはEdgeのIEモードでも動作しているの?

IEモードのタブを10個開いてみたところ、タスクマネージャー上でC:\Program Files\Internet Explorer\iexplore.exe(UI フレーム ウィンドウのプロセスと思われる)は1つ、C:\Program Files (x86)\Internet Explorer\iexplore.exe(タブプロセスと思われる)は4つになった。

f:id:satob:20211107232758p:plainf:id:satob:20211107232810p:plain

IEモードのタブを1個開いたときは前者・後者とも1つだけだった。LCIEがタブプロセスを増やす場合、15タブでタブプロセス3つとかのはず*6で、10タブで4プロセスという組み合わせにはならないのでは?

iexplorer.exeのプロパティ(特に詳細情報)は?

C:\Program Files\Internet Explorer\iexplore.exe (UIフレームウィンドウ用と思われる)のプロパティは以下。「ファイルの説明」はInternet Explorer、ファイルバージョン・製品バージョンは11.0.22000.120となっている。

f:id:satob:20211108014831p:plain

C:\Program Files (x86)\Internet Explorer\iexplore.exe(タブプロセスと思われる)のプロパティは以下。ファイルサイズ以外は、C:\Program Files\以下にあるものと同じ。

f:id:satob:20211108014843p:plain

いずれもInternet Explorerのバージョン11であるというファイルになっている。

結論

EdgeのIEモードは「IE11のデスクトップアプリケーション」*7がいるわけでもなく、EdgeのプロセスモデルIEコンポーネントブラウザになっている(mshtml.dllを直接組み込んでいる)わけでもない……という非常に説明がしづらい状態と言える。