WebView2 応用テクニック
レスポンスの内容を変更する(画像を読み込まない)
WebView2からのリクエストを行った際に、サーバからの画像リクエストのレスポンスを404にすることで、画像をエラー表示にする方法です。
画像の表示が不要なサイトであれば、この方法によってネットワーク速度やメモリ使用量を削減できます。
基本的なコードはレスポンスの内容を変更すると同じです。
AddWebResourceRequestedFilter
に対象のフィルターとしてImage
を指定します。
すると画像ファイルへアクセスされるときにCoreWebView2_WebResourceRequested
イベントが発生しますので、
ここでレスポンスとして404を返却するようにします。
サンプル
Public Class NoImage Private Async Sub NoImage_Load(sender As Object, e As EventArgs) Handles MyBase.Load AddHandler wv.CoreWebView2InitializationCompleted, AddressOf CoreWebView2_InitializationCompleted Await InitializeAsync() End Sub Private Async Function InitializeAsync() As Task Await wv.EnsureCoreWebView2Async(Nothing) End Function Private Sub CoreWebView2_InitializationCompleted(sender As Object, e As CoreWebView2InitializationCompletedEventArgs) wv.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.Image) AddHandler wv.CoreWebView2.WebResourceRequested, AddressOf CoreWebView2_WebResourceRequested End Sub Private Sub CoreWebView2_WebResourceRequested(sender As Object, e As CoreWebView2WebResourceRequestedEventArgs) e.Response = wv.CoreWebView2.Environment.CreateWebResourceResponse( Nothing, 404, "NOT FOUND", $"Content-Type: image/ png" ) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click wv.CoreWebView2.Navigate("https://web.biz-prog.net/") End Sub End Class
public partial class NoImage : Form { public NoImage() { InitializeComponent(); //初期化完了イベントを定義 webView2.CoreWebView2InitializationCompleted += WebView2_CoreWebView2InitializationCompleted; } private async void NoImage_Load(object sender, EventArgs e) { await InitializeAsync(); } private async Task InitializeAsync() { await webView2.EnsureCoreWebView2Async(null); } private void WebView2_CoreWebView2InitializationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e) { webView2.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.Image); webView2.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested; } private void CoreWebView2_WebResourceRequested(object? sender, CoreWebView2WebResourceRequestedEventArgs e) { e.Response = webView2.CoreWebView2.Environment.CreateWebResourceResponse( Content: null, StatusCode: 404, ReasonPhrase: "NOT FOUND", Headers: $"Content-Type: image/png" ); } private void button1_Click(object sender, EventArgs e) { webView2.CoreWebView2.Navigate("https://web.biz-prog.net/"); } }