はじめに
Internet Explorer 11(以下、IE11)は2022年6月にサービス終了となります。それ以降は利用できないように制御される予定です。
サービス終了については、マイクロソフトが1年前から入念なアナウンスを行っていました。ブラウザーとしての利用については、Microsoft EdgeのIEモードやサイトのモダン化といった手法で対策を進めている組織も多いのではないでしょうか。
また、IE 11がWindowsの標準機能として提供されていたこともあり、ブラウザーとしての利用以外にも、アプリケーションの基盤機能として利用されているケースもあります。 VBScriptやVBAといったスクリプトからIE 11を呼び出しているのをよく目にします。
この場合は、IE 11が使用できなくなることでアプリケーションの作り直しが必要となるため、サービス終了アナウンスの直後から対応方法を模索し、すでに改修を始めているのではないでしょうか。
今回は、このIE 11を呼び出すスクリプトの改修に関する内容をお話しします。
改修の対象は?
スクリプトの改修は必要だがまだ始められていない場合、どのようなスクリプトを改修の対象とするべきか見極めがついていないかもしれません。そのような場合は、以下のコードの有無を基準の1つとする方法があります。
CreateObject("InternetExplorer.Application")
このコードは、スクリプトの中でInternet Explorer(以下、IE)を起動するものです。
実際にはこの後に、サイトを開いたり、ファイルをダウンロードしたり、様々な作業を自動化するコードが書かれているものと思われます。
VBScriptのサンプルスクリプトで見てみましょう。以下は、スクリプトの中でIE 11を起動し、動作確認を行うコードです。今回はこのVBScriptを利用して、IE 11サービス終了後の動作を確認していきます。
' Internet Explorer 11 変数を定義
Dim objIE
' InternetExplorer 11 のオブジェクトを作成する
Set objIE = CreateObject("InternetExplorer.Application")
' InternetExplorer 11 を表示する
objIE.Visible = True
' 指定したURLのページを表示する
objIE.Navigate "表示したいサイトのURL"
' 完全にページが表示されるまで待機する
Do While objIE.ReadyState <> 4 Or objIE.Busy = True
WScript.Sleep 100
Loop
' 完全にページが表示されたらメッセージを表示
MsgBox "Done!"
※サンプルでは、当社のホームページURLを記していますが、scriptからアクセスしたいURLを指定してください。
このコードを全てメモ帳にコピーして、例えば、"IE11Script.vbs"などのように".vbs"の拡張子を付けてファイルに保存してください。サイトをIEで開くサンプルスクリプトができます。。
改修は必須か?
先述のIEを起動するコードは、IE 11サービス終了のアナウンス直後には、多くの動作不良が発生していました。しかし、2021年12月に発表された品質更新によって改善され、動作するようになりました。
そのため、先ほど作成したサンプルスクリプトのようにIEを起動するコードを使用するスクリプトは、改修の必要がなくなりました。まだ改修不要を知らない方も多いのではないでしょうか。
では実際に、サンプルスクリプトがWindows 10 21H1以降のバージョンで正しく動作するかどうかを見ていきましょう。
IE 11サポート期間中(2021 年 12 月の Windows 10 21H1)での動作
Windows 10 21H1(Build 19043.1348)は、2021年11月にリリースされたバージョンで、IE 11はサポート期間中です。このバージョンで先述のサンプルスクリプトの動作を見てみましょう。
Windows 10 21H1のPCでサンプルスクリプトを動作させると IE 11が起動し、指定したサイトが読み込まれます。完全にページが表示されたら「Done!」とメッセージを表示するはずです。
うまく動作してくれました。(図3)
IE 11 サポート終了後の動作
IE 11がサポート終了となった場合、IE 11は起動しなくなります。IE 11サポート終了後の状態で動作を確認しましょう。グループポリシーを変更することでその状態を作り出すことができます。
グループポリシーを変更するためには、[Win] + [R]キーを押下し、[ファイル名を指定して実行]ダイアログを開きます。[名前(O):]に以下のコマンドを入力して[グループポリシーエディター]を起動しましょう。
gpedit.msc
[グループポリシー エディター]で、[コンピューターの構成] - [管理テンプレート] - [Windows コンポーネント] - [Internet Explorer]を選択し、[Internet Explorer 11をスタンドアロンブラウザーとして無効にする]を「有効」に設定します。
これでIE 11 が使用できなくなりました。2022年6月以降のIE 11サポート終了と同様の環境です。
それではこの状態で、サンプルスクリプトを動作させてみましょう。 今度はIE 11は起動せずMicrosoft Edgeが起動し、スクリプトがエラーになって終了していることがわかります。
このエラーは、サンプルスクリプトにある以下のコードが IEから情報を取得できないために発生します。
objIE.ReadyState
※ReadyState・・・IEオブジェクトのドキュメントの読み込み状態を示すプロパティ。0~4の5段階で、4は全データ読み込み完了を示す。Busyプロパティ:「True」は読み込み中を示し、Busyプロパティ:「False」かつReadyStateプロパティ:「4」で読み込み完了となる。
この問題を回避するために、スクリプトを大幅に作り変えて、WebDriver※の技術を使ったコードに書き換えているケースも多かったのではないでしょうか。
※WebDriver・・・EdgeやChromeといったブラウザーの操作をコードで自動化する仕組み。ここまでに説明した操作に似ているが、Windowsに標準インストールされていないため、利用には一定のスキルが必要となる機能。
WebDriver を使用して Microsoft Edge を自動化する
IE 11起動の改善後(2022年3月のWindows 10 品質更新プログラム)の動作
それでは、IE 11の起動が改善された状態で同じ操作を行ってみましょう。2022年3月の品質更新プログラムを適用したWindows 10 21H1(Build 19043.1586)で動作を見ていきます。2021年12月に改善が発表された1月以降の品質更新プログラムを適用しても同様の動作となります。
先ほどと同様に、「Internet Explorer 11をスタンドアロンブラウザーとして無効にする」を有効化した状態でサンプルスクリプトを動作させてみましょう。
IE 11の画面が表示され、操作が正常に終了したメッセージが表示されました。(図9)
グループポリシーを確認するとIE11は起動しない設定になっています。(図10)
このバージョンでは、以下フォルダーにあるIE 11の起動アイコンをクリックするとMicrosoft Edgeが起動するように設定されています。
C:\Program Files (x86)\Internet Explorer\iexplore.exe
しかしスクリプトから起動する場合は IE11 が起動するというわけです。
このスクリプト上の動作は公式にサポートされています。こちらのサイトのFAQ 9番をご覧ください。
Internet Explorer 11 デスクトップ アプリケーションのサポート終了 – 発表に関連する FAQ のアップデート
さいごに
2022年6月のサービス終了が目前に迫り、IE 11関連のサポートが公開され動作にも変化が生じています。
まだスクリプトの改修を始めていない場合は、改修が必要かどうか、まずは最新の環境で動作検証を行ってみるとよいでしょう。すでに改修が行われている場合でも、最新の品質更新プログラムを適用した状態で動作検証を行っておくことをお薦めします。
当社ではこのようなIE 11サービス終了に関する支援、スクリプトの動作検証サポートなども行っています。是非お問い合わせください。
関連サービスについて、詳しくはこちらをご覧ください