WebViewコントロール(.NET MAUI)の基本的な操作
ここではWebViewコントロール(.NET MAUI)の基本的な操作方法について解説します。
Webページの表示
URLを指定してWebページを表示するにはSource
プロパティを使用します。
htmlのコードの内容を表示させる場合もSource
プロパティに設定します。
ただし、Sourceプロパティはページの読み込み完了を待ちませんので、
後述する読み込み完了待ちの処理をいれないと、読み込み途中のまま次の処理が行われてしまいます。
実装方法
サンプル
//urlを指定する場合 MyWebView.Source = "https://web.biz-prog.net/"; //htmlコードから表示する場合 string htmlSource = @"test"; MyWebView.Source = new HtmlWebViewSource() { Html = htmlSource };
読み込み待ち
Source
プロパティでWebページを表示したり、リンクのクリックを行ったり、Submitを行った直後は、
ページの読み込み途中なので続けて処理を行うとエラーになります。
ページの読み込みが終わるまで待機する処理が必要です。
WebViewでは読み込みが完了するとNavigated
イベントが発生しますので、
Navigated
イベントが発生するまで処理を待機してやります。
サンプル
using System.Diagnostics; namespace MauiWebView; public partial class MainPage : ContentPage { readonly CountdownEvent condition = new CountdownEvent(1); public MainPage() { InitializeComponent(); MyWebView.Navigated += WebView_Navigated; } private void WebView_Navigated(object sender, WebNavigatedEventArgs e) { //読み込み結果を判定 if (e.Result == WebNavigationResult.Success) Debug.WriteLine("complete"); else Debug.WriteLine("error"); //シグナル初期化 condition.Signal(); System.Threading.Thread.Sleep(1); condition.Reset(); } private async void OnNavigateClicked(object sender, EventArgs e) { MyWebView.Source = "https://web.biz-prog.net/test/testpage.html"; //非同期実行 await Task.Run(() => { //読み込み完了まで待機 if (!condition.Wait(5000)) { Debug.WriteLine("timeout"); return; } }); Debug.WriteLine("読み込み完了"); await MyWebView.EvaluateJavaScriptAsync("document.getElementById('inputid2').value = 'テキスト2 all id';"); } }
戻る/進む
閲覧履歴の「戻る」「進む」を行います。
これら操作でもページの読み込みが発生しますので、メソッド実行後に、読み込み完了を待つ処理が必要です。(上記参照)
実装方法
サンプル
if (MyWebView.CanGoBack) { MyWebView.GoBack(); } if (MyWebView.CanGoForward) { MyWebView.GoForward(); }
中止/リロード
サイトのリロード(再読み込み)を行います。
リロードを行った場合はサイトの読み込みが発生しますので、メソッド実行後には読み込み完了を待つ処理が必要です。
実装方法
サンプル
//中止を行うようなメソッドは存在しなかった //リロード MyWebView.Reload();
URL/ローカルhtmlの取得
WebViewコントロールから現在表示しているサイトのURLやローカルhtmlを取得します。
実装方法
WebViewのSourceプロパティにはURLまたはローカルhtmlが取得できます。
Sourceプロパティの取得値はWebViewSourceクラスなので、
入っている値がurlなのかローカルhtmlコードなのかを判定します。
サンプル
if (MyWebView.Source is UrlWebViewSource url) { //URL形式の場合 Debug.WriteLine(url.Url); } else if (MyWebView.Source is HtmlWebViewSource html) { //html形式の場合 Debug.WriteLine(html.Html); }
htmlの取得
現在表示しているページのhtmlを取得します。
実装方法
EvaluateJavaScriptAsync
とJavaScriptのコードを使ってhtmlを取得します。
取得した文字列に対して、文字コードの変更と、文頭の余計な文字を除去します。
サンプル
var html = await MyWebView.EvaluateJavaScriptAsync("document.documentElement.outerHTML"); html = Regex.Unescape(html); html = html.Remove(0, 1); //OSによっては先頭にゴミが入っていないのでRemoveは不要の場合があります。