はじめに (対象読者・この記事でわかること)

この記事は、主に以下のような方を対象としています。
- 自社のレガシーシステムが Internet Explorer(IE)専用のページを持ち、Microsoft Edge だけがインストールされている環境で作業しているエンジニア
- IE でしか動作しない JavaScript(ActiveXObject や document.all など)を保守・改修したいフロントエンド開発者
- ブラウザ間の互換性やレガシー対応策に関心がある IT 管理者

本記事を読むことで、次のことが実現できます。
1. Microsoft Edge の「IE モード」や ms-edge: スキーマを使って、同一ウィンドウまたは新規タブで IE を起動する具体的手順が分かります。
2. JavaScript 側で IE と Edge の挙動差を検出し、互換性コードを安全に書く方法が理解できます。
3. 実際に社内で導入した事例と、導入時に注意すべきポイント(セキュリティ、ポリシー設定、トラブルシューティング)を学べます。

この背景には、2023 年に IE が正式にサポート終了したことに伴い、レガシー業務を継続しなければならない多くの企業が直面した「Edge しか使えないが IE が必要」というジレンマがあります。そこで本記事では、できるだけシンプルに「Edge → IE」への遷移手段と、JavaScript での対策をまとめました。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。
- HTML / CSS の基本的な構造と、ブラウザコンソールの操作方法
- JavaScript の基礎(変数、関数、イベントリスナー)と、モダンブラウザ向けの開発ツール(ES6、npm 等)
- Windows のレジストリやグループポリシー(GPO)に関する最低限の理解(Edge の企業向け設定を変更する際に必要)

Edge から IE を呼び出す概要と背景

Microsoft Edge は Chromium ベースに移行したものの、企業向けに「IE モード」を提供しています。IE モードは内部的に IE 11 のレンダリングエンジンを組み込み、指定した URL を IE の互換ビューで表示させる機能です。IE モードは主に以下のシナリオで利用されます。

  1. レガシー社内システム:社内の業務アプリが IE のみで動作する場合、IE モードでの表示により別途 IE をインストール・起動する手間を省く。
  2. 外部ベンダー提供のポータル:ベンダーが IE のみ対応と明言している場合、Edge の設定だけで利用者にシームレスな体験を提供できる。

IE モードを有効にする方法は大きく分けて 組織単位のポリシー設定ローカル設定 の二通りがあります。ポリシー設定では「Internet Explorer mode Sitelist」を XML で管理し、対象 URL を列挙します。一方ローカル設定では Edge の edge://flags から「Enable IE Integration」フラグを有効化し、手動で URL を入力するだけで一時的に IE モードへ遷移できます。

しかし、IE モードは「ページ単位」のみであり、別ウィンドウで IE を立ち上げることはできません。そこで実務で利用される手法は、ms-edge: カスタムスキーマを使って Edge から外部アプリ(IE)を直接起動する方法です。このスキーマは Windows の「Protocol」レジストリにエントリを作成することで自作でき、以下のようなコマンドが実行可能です。

ms-edge:https://example.com?ie=true

上記 URL にパラメータ ie=true を付与し、Edge 側で JavaScript が検知したら shell:openiexplore.exe にリダイレクトする仕組みです。この方式は、ユーザーが Edge をデフォルトブラウザとしている環境でも、IE がインストールされていれば即座に IE のウィンドウが立ち上がります。次の章で具体的な実装手順と、実装時に注意すべきポイントを詳しく解説します。

Edge から IE を起動する具体的手順と JavaScript 実装

以下では、実際に「Edge → IE」を実現するための手順をステップごとに解説します。前提は Windows 10/11 環境で、Edge と IE(iexplore.exe)がインストールされていることです。

ステップ 1:カスタムプロトコルハンドラの登録

  1. レジストリのバックアップ
    regedit を管理者権限で起動し、HKEY_CURRENT_USER\Software\Classes 配下に新しいキーを作成します。作業前に必ずエクスポートしてバックアップを取得してください。

  2. キーの作成
    - キー名: myie(任意の名前)
    - デフォルト値: URL:Open IE Protocol(説明用)
    - URL Protocol という名前の空の文字列値を追加(この値の存在が「プロトコル」として認識させる鍵)

  3. コマンドの設定
    myie\shell\open\command キーを作成し、デフォルト値に以下を設定します。

"C:\Program Files\Internet Explorer\iexplore.exe" "%1"

ここで %1 には呼び出し元が渡す URL が入ります。たとえば myie://https://legacy.example.com とすると、IE がその URL を直接開きます。

  1. レジストリのリフレッシュ
    コマンドプロンプトで ie4uinit.exe -ClearIconCache を実行すると、キャッシュがクリアされプロトコルがすぐに有効になります。

ポイントiexplore.exe のパスは OS のバージョンや 32/64 ビット環境により異なる場合があります。where iexplore コマンドで実際の場所を確認してください。

ステップ 2:Edge 側の JavaScript で判定とリダイレクト処理

次に、Edge のページ上で「IE が必要かどうか」を判定し、必要なら myie: プロトコルで IE を起動します。以下はモダン JavaScript(ES2022)で書いたサンプルです。

Js
/** * IE が必要かどうかを判定する関数 * 判定基準は主に以下をチェック * - userAgent に "MSIE" または "Trident" が含まれるか * - 特定の機能(document.all, ActiveXObject)が未実装か */ function needsIE() { const ua = navigator.userAgent; const isIE = /MSIE|Trident/.test(ua); const lacksModernAPI = typeof document.all === 'undefined' || typeof ActiveXObject === 'undefined'; return isIE || lacksModernAPI; } /** * IE で開くべき URL を生成し、カスタムプロトコルで起動 */ function openInIE(url) { const encoded = encodeURIComponent(url); const ieUrl = `myie://${encoded}`; // a 要素を作ってクリックイベントを発火させる(ポップアップブロック回避策) const a = document.createElement('a'); a.href = ieUrl; a.style.display = 'none'; document.body.appendChild(a); a.click(); document.body.removeChild(a); } /** * ページ読み込み時に自動判定 */ document.addEventListener('DOMContentLoaded', () => { if (needsIE()) { const target = window.location.href; // 確認ダイアログ(必要なら省略可) if (confirm('このページは Internet Explorer でのみ正しく表示できます。IE を起動しますか?')) { openInIE(target); } } });

コード解説

  • needsIE()User-Agent機能検出 を組み合わせています。IE 特有の document.allActiveXObject が利用できない環境は「レガシー」扱いとしています。
  • openInIE() では先程登録した myie: プロトコルに対象 URL をエンコードして渡しています。a.click() による擬似クリックは、ブラウザが「ユーザー操作」から派生したとみなしてポップアップブロックを回避します。
  • DOMContentLoaded イベントで自動判定し、必要なら confirm ダイアログでユーザーの同意を取得してから IE を起動します。実運用では社内ポリシーに合わせて UI をカスタマイズしてください。

ステップ 3:Edge の IE モード設定(代替策)

カスタムプロトコルが使えない環境(例:社内 PC がレジストリ変更禁止)では、IE モード が唯一の公式手段となります。以下に企業向けの設定方法を示します。

  1. グループポリシーエディタ (gpedit.msc) を開く
  2. コンピューターの構成 > 管理用テンプレート > Microsoft Edge > Internet Explorer モード に移動
  3. Internet Explorer モードでサイトを自動的に開く を有効化し、XML でサイトリストを指定

XML 例:

Xml
<?xml version="1.0" encoding="utf-8"?> <SiteList version="1"> <site url="https://legacy.example.com" openIn="IEMode" /> <site url="https://intranet.company.local/*" openIn="IEMode" /> </SiteList>

このファイルを C:\EdgeIEList\sites.xml に保存し、ポリシーでパスを設定すれば、対象 URL にアクセスした瞬間に Edge が自動的に IE モードへ切り替わります。

注意点
- IE モードは内部的に IE 11 のレンダリングエンジン を使用しますが、プロセスは Edge の中で走るため、iexplore.exe が起動するわけではありません。そのため、ActiveX のような「外部プロセス連携」機能は制限されます。
- IE モードは 2029 年 3 月 にサポートが終了する予定です。長期的にはフロントエンドコードのリファクタリングが不可欠です。

ハマった点やエラー解決

発生した問題 原因 解決策
myie: プロトコルが認識されない レジストリに URL Protocol が設定されていない HKEY_CURRENT_USER\Software\Classes\myie に空文字列の URL Protocol 値を必ず追加
IE が起動しても URL が変換されず空白になる myie:// の後にエンコードせずそのまま URL を入れた encodeURIComponent でエンコードし、IE 側で decodeURIComponent して取得
ポップアップブロックが発生 window.open 直呼び出し <a> 要素の click() を使用し、ユーザー操作に紐付け
64bit 環境で iexplore.exe が見つからない デフォルトパスが C:\Program Files (x86)\Internet Explorer\iexplore.exe 正しいパスを reg query "HKLM\SOFTWARE\Microsoft\Internet Explorer" /v "ExecutablePath" で確認し、レジストリに反映
IE モードで ActiveX が動かない IE モードはサンドボックス化され、ActiveX をブロック グループポリシーで Allow ActiveX controls を有効化(セキュリティリスクあり)

解決策まとめ

  • レジストリ設定ミスは最も頻繁に起きるので、URL Protocol の有無とパスの正確さを必ずダブルチェック。
  • URL エンコードは必須です。IE 側で decodeURIComponent しないと、%3A 等がそのまま表示されてページが壊れます。
  • ユーザー操作に紐付けないとブラウザがブロックします。click() を使うテクニックは覚えておくと便利です。
  • IE モードは短期的な代替手段。根本的なレガシーコードのリファクタリングが必要です。

まとめ

本記事では、Microsoft Edge から Internet Explorer を直接起動する カスタムプロトコルハンドラ の作成手順と、JavaScript での判定・リダイレクト実装を解説しました。

  • カスタムプロトコル (myie:) の登録により、Edge 上のページから任意の URL を IE で開くことが可能。
  • JavaScript 判定ロジックで、IE が必須かどうかを自動検知し、ユーザーに確認してから IE を起動。
  • IE モードはポリシー設定で補完できるが、機能制限とサポート終了が近いため、最終的にはフロントエンドのモダナイズが必要。

これらを活用すれば、レガシーシステムを抱える組織でも Edge 環境下でスムーズに IE を呼び出せるようになり、業務停止リスクを低減できます。今後は、IE 依存コードの自動変換ツールや、Edge の WebView2 への移行ガイドを別途掲載する予定です。

参考資料