[vbs]2022/07/20現在のCreateObject("InternetExplorer.application")はどうなるか

# 正直Edgeはたちが悪い
## 起動もしていないのに勝手に起動している
タスク・マネージャーを見ると、アドインを勝手に起動させている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/30ed802e-8842-3250-de68-4188efc48eb3.png)
これらの一つを終了させようとすると「アドインが終了します」という警告が出るので、アドインの数で増えるらしい。
高速起動するのは予め起動させているからというMS商法だ。

## ブックマークを配布することができない
ブックマークのある場所はわかったが、JSONみたいな形で記述してある。
メモ帳で加工しろとでも言うのだろうか。
これが個人ならまだいいが、組織で「ここにアクセスしてデータを取得してほしい」というときには、いちいちアクセスしたからお気に入りに入れなければならない。
IEであればVBSでお気に入りフォルダに設定できたのだが、これができない。セキュリティ以前の問題。
このため、IEに設定してIEからインポートするという洒落にならない方法を取らなければならない。
## マイクロソフトは移行措置情報がない
[Internet Explorer HTML ページのレンダリング時に誤った文字セットを使用する場合](https://docs.microsoft.com/ja-jp/troubleshoot/developer/browsers/development-website/wrong-character-set-for-html-page)
>Internet Explorer HTML ページのレンダリング時に誤った文字セットを使用する場合
<b>2022/01/26</b>
:::note warn
重要
Internet Explorer 11 デスクトップアプリケーションは、Windows 10 の一部のバージョンにおいて、2022 年 6 月 15 日をもって引退およびサポート終了となります。
Microsoft Edge の Internet Explore モードで、Internet Explorer を必要とする古いレガシーサイトに引き続きアクセスできます。 詳細情報を参照してください。
Internet Explorer 11 のデスクトップアプリケーションは、より高速で安全なMicrosoft Edge ブラウザに順次リダイレクトされ、最終的にはWindows Update 経由で無効される予定です。 IE を今すぐ無効にします。
:::
この記事では、正しくない文字セットを使用して HTML Internet Explorer表示する問題を解決するためのメソッドを提供します。
元の製品バージョン:   Internet Explorer
元の KB 番号:   928847

Internet Explorer uses wrong character set when it renders an HTML page
Article
01/25/2022
2 minutes to read

>
:::note warn
Important
The Internet Explorer 11 desktop application is retired and out of support as of June 15, 2022 for certain versions of Windows 10.
You can still access older, legacy sites that require Internet Explorer with Internet Explorer mode in Microsoft Edge. Learn how.
The Internet Explorer 11 desktop application will progressively redirect to the faster, more secure Microsoft Edge browser, and will ultimately be disabled via Windows Update. Disable IE today.
This article provides the methods for you to solve the issue that Internet Explorer renders an HTML page by using the incorrect character set.
:::

Original product version:   Internet Explorer
Original KB number:   928847

おわかりいただけるだろうか。この記事の更新日は2022/01 半年前である。本来、6月15日を過ぎた場合、was retiredに変えるのが正しい。
[Internet Explorer モードを今日にでもセットアップしましょう](https://www.microsoft.com/ja-jp/edge/business/ie-mode)
ここに来てもその先はPDFで延々と文章を読まなければならない。
しかし、ここで問題なのはScriptの話であるがこれまたない。

## Edge：IEモード 30日更新の回避法

http://office-qa.com/win/win277.htm

なぜこんな設定をしたのか理解しがたいが、レジストリをいじらないと、IEモードの登録は30日で切れてしまう。
さらにxmlで登録する場合、バージョン番号が必要になる。

## 終焉できない

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">今回の発表では、現在リリースされている Windows 10 LTSC や Windows Server は IE11 アプリのサポート終了の対象外となります。ただ、これらの OS のサポートも 2029 年には終了するため、2029 年を IE11 の真の終焉とすべく、お客様の移行を支援していきたい所存です。</p>&mdash; ユスキィ (Yusuke Hara) (@ms_yuhara) <a href="https://twitter.com/ms_yuhara/status/1395050171830915074?ref_src=twsrc%5Etfw">May 19, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

反対にいうと2029年まではこのまま

## 終焉できない2
[電子書籍（e-Book）が「Internet Explorer 11」等で表示されない場合の対処方法](https://www.k-mil.net/contents/detail/635)
いかにぎゃああぎゃあ喚き散らそうが、CD-rで電子ブック、紙なんていらない。IEでブラウジングもスムーズと言って売ったのは少なくともマイクロソフトだろう。
確かに、企業のシステムからIEをなくしても、CD-Rがある限りどうしようもない。それをやると、「なんだ、長期保存は紙が優れているじゃないか」という当然の結論に落ちつく。MSはロケットがついた車で1980年代に戻り、IEの開発を阻止すべきだろう。

## 終焉できない3
https://support.microsoft.com/ja-jp/windows/internet-explorer-%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89-d49e1f0d-571c-9a7b-d97e-be248806ca70#ID0EBBD=Windows_7
Internet Explorer 11 for IT Professionals and Developers--Windows 7 64-bit Edition and Windows Server 2008 R2 64-bit Edition 
https://www.microsoft.com/en-us/download/details.aspx?id=40901
Windows7はダウンロード可能

## 終焉できない4

[Windows 11で葬られたはずのInternet Explorerを呼び出す死霊術が発見されてしまう](https://forest.watch.impress.co.jp/docs/serial/yajiuma/1378907.html)

https://qiita.com/lumin/items/bd2a8e90efb4010e2804

官公庁だけじゃなくて古いオーディオブックとか、dllがあって、無理なんですよね。

https://jo-sys.net/windows11-ie/

ここではインストールされていないとされているが、されているのではないか。

https://blogs.windows.com/japan/2022/02/21/internet-explorer-11-desktop-app-retirement-faq/

Internet Explorer は完全にアンインストールしたほうがよいのでしょうか？ (2022 年 5 月 25 日 追加)
いいえ。Internet Explorer (IE) モードを機能させるために Internet Explorer 11 (IE11) が必要です。IE11 をアンインストールまたは削除すると、IE モードが機能しなくなります。
6 月 15 日以降の IE 無効化に備えるには、6 月 15 日より前に組織内での IE の利用を中止することをご検討ください。
どのような方法で準備すればよいかについては、マイクロソフトのブログ記事 (英語) をご覧ください。

## Sleniumも2016年のママ

 https://github.com/florentbr/SeleniumBasic/releases/tag/v2.0.9.0

ただし、公式サイトではIE Driverがダウンロードできる。

https://www.selenium.dev/downloads/


## 有終の美はない

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">かろうじて、このIssueは今のところEdgeでは改修されました🎉<br>しかしながら、根本的なIE11のコンポーネントの脆弱性(CWE-476: NULL Pointer Dereference)は内在したまま、サポート終了という結果になっています。 <a href="https://t.co/2ckzZXjRq4">pic.twitter.com/2ckzZXjRq4</a></p>&mdash; りいんちゃん (@reinforchu) <a href="https://twitter.com/reinforchu/status/1547769471447998465?ref_src=twsrc%5Etfw">July 15, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

## 反対に言うとSCriptのIEは削除できない
確かにネット閲覧というような機能は接続不能なサイトも増えて無理だろう。
システムも移行するだろう。
なので、スクリプトの中にひっそりと生きるのではないか。

## 変更された挙動
[2022年6月のIE 11サービス終了に向けてスクリプトの動作を確認しましょう](https://www.fsi.co.jp/blog/8326/)
>(2022/03から)しかしスクリプトから起動する場合は IE11 が起動するというわけです。

[Microsoft Edge で Internet Explorer ドライバーを使用して IE モードを自動化する](https://docs.microsoft.com/ja-jp/microsoft-edge/webdriver-chromium/ie-mode?tabs=javascript)
>2022/06/30
ビジネスクリティカルな従来の Web サイトやアプリがある場合は、Microsoft Edgeで Internet Explorer (IE) モードでコンテンツをテストすることが必要になる場合があります。 この記事では、Internet Explorer Driver (IEDriver) を使用して、Microsoft Edgeで IE モードを自動化する方法について説明します。
Microsoft Edgeの IE モードは、従来の Web サイトやアプリの下位互換性のために Internet Explorer 11 を引き続き必要とする組織向けの機能です。 IE モードの詳細については、「Internet Explorer (IE) モードとは」を参照してください。
2022 年 6 月 15 日から、Internet Explorer 11 は特定のバージョンの Windows 10ではサポートされなくなります。 詳細については、「Internet Explorer 11 デスクトップ アプリの廃止に関する FAQ」を参照してください。


## ブラウジングではない例
しかしさりげない使用例はある
例えばテキストファイルの文字コード取得の場合。

[CSVの読み込み方法（改の改）](https://excel-ubara.com/excelvba5/EXCELVBA257.html)

```vb
'文字コードの自動判別
'UTF-8のBOMなしは文字コードの判別に対応できていません。
Function getCharSet(ByVal sFile As String) As String
　　Dim objHtml As MSHTML.HTMLDocument
   'Dim objHtml As New Internet.Explorer
　　Dim strRec As String
　　'GetObjectでHTMLDocumentを生成し、文字コードを判定する
　　Set objHtml = GetObject(sFile, "htmlfile")
　　Do While objHtml.readyState <> "complete"
　　　　DoEvents
　　Loop
　　getCharSet = objHtml.CharSet
　　Set objHtml = Nothing
End Function
```

`Dim objHtml As MSHTML.HTMLDocument`ここの部分はIEにしてもそのまま通じる。

VBSでもそう

```vb
Function getCharSet( sFile )
Dim objHtml
` set objHtml  = CreateObject("MSXML2.XMLHTTP") 
  set objHtml  =  CreateObject("InternetExplorer.Application") 
  Set objHtml = GetObject(sFile, "htmlfile")
   Do While objHtml.readyState <> "complete"
      Wscript.sleep 100
   Loop
getCharSet = objHtml.charSet
'objHtml.Visible = True
'objHtml.Quit
Set objHtml = Nothing
End Function
```

VBS版でIEを使っても文字コード判定できる。このようにScriptは後方互換性が保たれている。
移行自体は簡易だが、特に変更しなくても動いてしまう。

### ただし欠点がある
これはバグなのか不明だがWindows10では次のような現象が起きた。

まず
`objHtml.Visible = True`はエラーになる。
`objHtml.Quit`もエラーになる。
IEをインストールしているのにもかかわらず表示できない。

## システム終了するまでIEがタスクマネージャに表示される
しかも使用するごとに増えていく。
終了させるとまた増えてしまい、再起動する前で動き続ける。
Quitが効かないのと関連していると考えられる。

## Jscripの場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/e7ed903a-33c6-b0e4-8bbc-06299c8a1411.png)

[たった５行のコードでWebページ取得・解析をするJavaScriptプログラム](http://dqn.sakusakutto.jp/2010/06/webjavascript.html)

```js
var IE = new ActiveXObject('InternetExplorer.Application');
var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
IE.navigate('https://yahoo.co.jp');
while (IE.busy);
while (IE.document.readyState != "complete");
WSH.Echo(IE.document.getElementById('topicsfb').innerText);
IE.Quit();
```

拡張子をjseとして保存
Quitでエラーは出ないが、データは取得できない。やはりIE1が残る。
Ieだけではなくielowutil.exe ieSettingSync.exeというのも残る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/761c23e0-b74e-b787-f750-75514261b9ec.png)

これについては、Jscriptの記事がQiitaにあったので後述する。
## 結局計画的に行動すべきなのはMSでは？
有り体に言ってユーザーに計画しろと言いながら情報の更新日は6月15日とかありえない。
[Internet Explorer (IE) モードとは](https://docs.microsoft.com/ja-jp/deployedge/edge-ie-mode#ie-mode-supports-the-following-internet-explorer-functionality)
> 2022/06/16

[「Internet Explorer」サポート終了に自治体「なんで急に」報道　Twitterで「さすがに草」などの声](https://www.itmedia.co.jp/business/articles/2206/16/news172.html)
しかし、この報道のあとMSは緊急にIEは使用できますという声明を出した。
計画的にも何も3月に挙動を変えるのはMSの方であり、常識的に対応ができるわけがない。
さらに、スクリプトはまだしも
例えば、cmdからPowershellに移行するときはコードの例を示してきた。

https://blog.powershell-from.jp/?p=243

https://manami-trans.hatenablog.com/entry/2019/10/04/120623

現在は英語版のみ残っている。

https://devblogs.microsoft.com/scripting/heyscriptingguyupdate/

このようなロゼッタストーンが必要となる。つまり換算に必要なサンプルがなければならない。
それでもセキュリティを理由にして移行を反故にしたのはMSのせいである。

MSには不幸なことにWebDriverなどインストールできない。これまたMSのせいである。

さらに中核であるVBAに関してはどこにも何も書いていない。
その理由ははっきりしている。
Google Doc Spreadsheetだ。
GASを使ってオートメーション化できる。
これに対抗できない限り、MSは終わってしまう。

### WebBroser Control
[WebBrowserコントロールのIEサポート終了後の表示 ](https://answers.microsoft.com/ja-jp/ie/forum/all/webbrowser%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD/2e8acd02-f0a3-4e5b-baed-e345e77c17f2)
[IEサポート終了でVBAマクロはどうなるの？ | 初心者備忘録](https://www.ka-net.org/blog/?p=13587)
サポート自体は2029年まで継続する。しかしGoogleMapなどサイト側で非対応になる。

https://maps.multisoup.co.jp/blog/4798/

>Visual Studio の Web BrowserコントールはIEベースなので、こちらも対応が必要です。
少し調べた感じでは、Chromeベースのコントロールがあるらしいのでそちらに置き換える必要があります。
参考サイトはこちらです。

https://qiita.com/yaju/items/97b61d0d8bc3f9ed044d

https://atmarkit.itmedia.co.jp/ait/articles/1409/05/news165.html

これのことであろう。単純にIEを使っていなかったとしても安心ができない。

VBAでなくてもよいがjavaやPythonにすればMSでなくてもよい。
これにくわえて、今後インフレと円安でサーバーの更新、OSの更新はできない。
さらにあと数年すればBricks製のOSにかわられるだろう。
さらにAndroidタブレット、スマホの猛攻。
四面楚歌とはこのことだ。
[サポートを終了した「Internet Explorer」の“亡霊”は、今後もウェブに脅威をもたらし続ける](https://wired.jp/article/internet-explorer-dead-security-risks/)
さらにいくら無効化しようと裏で動き続けるため意味がない。

## まとめ
結論から言うとieで開けるのであれば、現時点で移行できる可能性は全くない。
これはマイクロソフトがそもそも移行できないからだ。
移行するための情報の欠如は先例と比較しても明らかである。
しかしながら、これがWindows10のバージョンか、プラグイン等のせいなのか謎だが、これまでの経緯からみても不安定であることも否めない。それが今回の現時点での結論となった。
したがって、文字コードの取得のように簡単に変更できるものは移行したほうがいいだろう。
また、vba、BAT ,JSCRIPTに関する情報、お気に入りの追加の自動化は必要だ。これがいつ発表になるかが2029年に計画的に移行できる今後の鍵になるだろう。
早くしないとみんなBRRICKSbookになっちゃうよ。
### 追記 ブラウズする場合のJSciptはあったが
[すぐに使えるJScript関数集 - Qiita](https://qiita.com/economist/items/772277b698686bdd7ae3)

#### metaが互換モード
```js
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=11">' + http.responseText);
```
IEも立ち上がっていないが、Edgeも立ち上がらない。しかし、無理にmetaを書き換えている感じだ。
なお、
[IE対策の「X-UA-Compatible:IE=edge」は必要か？ | バグ取りの日々](https://www.bugbugnow.net/2020/02/X-UA-CompatibleIE-edge.html)
これからすると、実際は`IE=EDGE`がただしい。
[意外と知られていない、IE11リリースによる本当の危機 - ふろしき Blog](https://furoshiki.hatenadiary.jp/entry/2013/11/26/032352)
[Web開発のガイドライン・ツール集 - ふろしき Blog](https://furoshiki.hatenadiary.jp/entry/guideline)
[IE11のX-UA-Compatibleの使い方/動作仕様 - ふろしき Blog](https://furoshiki.hatenadiary.jp/entry/2013/11/25/024250)
[IE10のX-UA-Compatibleの使い方/動作仕様 - ふろしき Blog](https://furoshiki.hatenadiary.jp/entry/2013/11/25/023113)
#### Header
[WSH JScript による XMLHTTPRequest で更新日取得 - IKB: 雑記帳2009-05-13 ](https://ikb.hatenablog.com/entry/20090513/1242214366)
[XMLHTTP を使用した動的ページ更新](https://support.microsoft.com/ja-jp/topic/xmlhttp-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E5%8B%95%E7%9A%84%E3%83%9A%E3%83%BC%E3%82%B8%E6%9B%B4%E6%96%B0-3c16d126-ce9a-6986-3d5d-35bc4f519507)
[XMLHttpRequest についてのメモ - Qiita](https://qiita.com/sirone/items/412b2a171dccb11e1bb6)
##### 公式
[MSXML1 | Microsoft Docs](https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/ms763742(v=vs.85))
　+ [XML for MSXML | Microsoft Docs](https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/ms753716(v=vs.85))
　+ [DOM | Microsoft Docs](https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/ms766487(v=vs.85))

ここは旧バージョンだが、ここにJscriptのサンプルがある。
特にいわゆるオブジェクトの解説は[DOM Reference | Microsoft Docs](https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/ms764730(v=vs.85))にあるらしい。とくにここ。[XML DOM Objects-Interfaces | Microsoft Docs](https://docs.microsoft.com/ja-jp/previous-versions/windows/desktop/ms760218(v=vs.85))

#### Async
waitForResponse
[WSH JScript による XMLHTTPRequest で更新日取得 - IKB: 雑記帳2009-05-13 ](https://ikb.hatenablog.com/entry/20090513/1242214366)
コメント欄参照。
[XMLHttpRequest についてのメモ - Qiita](https://qiita.com/sirone/items/412b2a171dccb11e1bb6)
[第12回　XMLHttpRequest入門 | gihyo.jp](https://gihyo.jp/dev/serial/01/crossbrowser-javascript/0012)
>openメソッドの第3引数で同期通信にすることも可能ですが、同期通信はsendしてからサーバーのレスポンスがあるまでJavaScriptの処理をすべて止めてしまうため、ユーザーを待たせてしまいます。省略時は非同期通信になるので、省略してもかまいません。
なお、呼び出す順番はこの順番を崩さないようにしましょう。まずopenしてからプロパティなどを編集し、最後にsendを実行する形が最も確実に動作します。