WebBrowserコントロールの今後

タグの編集
投稿者 Fujiko  (社会人) 投稿日時 2020/6/10 10:24:25
今までWebBrowserコントロールを使った手製アプリを作ったりしましたが、
WebBrowserのベースはIE7で、必要に応じIEの上位バージョンにエミュレートしていました。
(具体的にはレジストリ設定)

ただ、最近では、IEを現在または今後サポート対象外とするサイトが増えてきています。
MicrosoftもEdgeを使ってもらいたいようです。

この流れで、今後、IEがベースのWebBrowserコントロールがどうなっていくのかが心配です。
WebBrowserのエミュレートでも、IE11(Edgeモード)というものがあるようですが、
これでIEお断りのサイトに対応できるのかどうか分かりません。
(やってみればすぐ分かるのかも知れませんが。)

旧来のWebページであれば、WebBrowserでも問題なく表示できるのですが、
今後、WebBrowserコントロールはサポートされなくなるのでしょうか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/6/10 12:23:46
> 今後、WebBrowserコントロールはサポートされなくなるのでしょうか?
そもそも、 Windows 10 の長期サービスチャネル(LTSB/LTSC)版や Windows Server では
「Internet Explroer 11 が標準ブラウザー」であり、Microsoft Edge レガシは搭載されていません。

また、WebBrowser コントロールは、.NET Framework 2.0~4.8 だけでなく、
.NET Core 3.0 / 3.1 および .NET 5 でもサポートされます。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.webbrowser

その意味において、アプリから WebBrowser が直ちに使えなくなる…ということは無いでしょう。
WebBrowser では利用できないサイトというのはあるにしても。


> IEを現在または今後サポート対象外とするサイトが増えてきています。
New Edge や Chrome のみを推奨とした Web サイトがあるのは確かで、その場合、
Edge Legacy や Internet Explorer/WebBrowser では対応できなくなりますね。


以下、参考までに。使った事が無い物が多いので間違っているかも。
(準備中のものや、サポート終了したものもあります)


Trident エンジン (Internet Explorer) ベースなら:
 WebBrowser (System.Windows.Forms.WebBrowser)
 Microsoft Web Browser (ActiveX: ieframe.dll)

EdgeHTML エンジン (Edge Legacy) ベースなら:
 WebView (Microsoft.Toolkit.Forms.UI.Controls.WebView)
 WebView2 (Microsoft.Web.WebView2.WinForms.WebView2 / MtrDev.WebView2.Winforms.WebView2Control)

WebKit エンジン (Chrome Legacy) ベースなら:
 WebKit.NET (WebKit.WebKitBrowser)
 Awesomium (Awesomium.Windows.Forms.WebView)

Blink エンジン (Chrome、Edge)  ベースなら:
 CefSharp (CefSharp.WinForms.ChromiumWebBrowser)
 EO.WebBrowser (EO.WinForm.WebControl)
 DotNetBrowser (DotNetBrowser.WinForms.BrowserView)

Gecko エンジン (FireFox) ベースなら:
 GeckoFX (Skybound.Gecko.GeckoWebBrowser)
投稿者 るきお  (社会人) 投稿日時 2020/6/10 12:51:58
以前のロードマップに
Add Chromium-based Edge browser control
と書いてあり、多分、これが WebView2 になったのだと思います。

Windows Forms アプリでの WebView2 の概要 (プレビュー)
https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/gettingstarted/winforms

Microsoft Edge WebView2 の概要 (プレビュー)
https://docs.microsoft.com/ja-jp/microsoft-edge/webview2/

以前のロードマップ
https://github.com/dotnet/winforms/commit/31d08e95b8ec17cfa5f9d4dcb2dd3401daafd7ed#diff-cd4a1b36ed2b93cfc52abf77a7d25d03
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/6/10 15:30:44
最近、WebView2 の .NET 対応版となる 0.9.538-prerelease が公開されました。
安定版 0.9.538 ではなく、0.9.538-prerelease の方を使うことに注意してください。
https://www.nuget.org/packages/Microsoft.Web.WebView2/0.9.538-prerelease
https://github.com/MicrosoftEdge/WebViewFeedback/issues/46
投稿者 Fujiko  (社会人) 投稿日時 2020/6/12 16:30:59
WebView2のことはよく理解していないのですが、WebView2って、表示DocumentのElementByIdやElementsByTagNameのような、タグに対する解析も可能なのでしょうか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/6/12 17:56:46
先の回答、誤って WebView2 が EdgeHTML エンジンの欄に入れてしまいましたが、
実際は CefSharp と同様、Chromium 系のエンジンです。m(_ _)m

現在はまだ開発中のバージョンなので、過去に blog 等で紹介されていたサンプルも、
仕様変更(メソッド名の変更など)によって、動かないという事態も起こりえます。
リリースノートやリファレンスを読み解ける力量が要求されますね。


> 表示DocumentのElementByIdやElementsByTagNameのような

ElementById というのは、getElementById のことでしょうか。
だとすれば、実行時にスクリプトを挿入して window.document にアクセスしてください。

WebBrowser の場合とは操作手順がかなり異なりますが、
るきおさんが紹介してくださったサンプルにもあるように、
VB 側では PostWebMessageAs{String|JSON} メソッド / WebMessageReceived イベント、
Web 側では window.chrome.webview.postMessage / window.chrome.webview.addEventListener 
が準備されていますので、これを使ってデータの受け渡しや操作を行えます。

あとは ExecuteScriptAsync メソッドとか AddHostObjectToScript メソッドとか。