MAUIでiOSアプリの開発!

MAUIを使ったiOSアプリの開発についての技術的なメモです。

WebViewのカスタムコントロールを作る

Xamarinで開発したときはiOSのWkWebViewと使うためにRendererを使って実装していましたが、MAUIに移行したらJavaScriptが実行されなかったり問題が色々でました。
ハンドラーを使った実装を調べました。

 

https://stackoverflow.com/questions/73217992/js-net-interact-on-maui-webview
こちらの書き込みに色々試した形跡があり、サンプルコードもありました。
https://github.com/nmoschkin/MAUIWebViewExample

 

これらを参考にして、Sourceプロパティを扱えるようにし、C#からJavaScript実行できるようにしてみました。

※ひとまず動作してはいますが、あまり詳しくないので変なコードになっていてもご容赦ください。

 

MainPage.xaml
C#からJavaScriptを実行するためのボタンを追加

MainPage.xaml.cs
・ViewModelのSourceプロパティへの設定を、MyWebViewのSourceプロパティの設定へ変更
・追加したボタンのクリックイベントを作成し、MyWebView.EvaluateJavaScriptAsyncでJavaScriptを実行する処理を追加

HyblidWebView.cs
・IHybridWebViewの継承元をIView→IWebView
・HybridWebViewの継承元をView→WebView
・Sourceプロパティ関係の記述を削除

HybridWebViewHandler.cs ※iOS
・Sourceプロパティ関係の記述を削除
・HybridWebViewHandlerクラスの継承元をViewHandler→WebViewHandlerに変更
・PropertyMapperを定義し、Sourceプロパティををマッピング
・コンストラクタにMapperとCommandMapperを渡す
・JSBridgeクラスでhybridRenderer.VirtualViewにアクセスするときにHybridWebViewにキャストする。


WebViewHandlerに定義がないプロパティ(今回の場合はSource)を使いたい場合は、PropertyMapperでマッピングを追加しないといけません。
EvaluateJavaScriptAsyncはWebViewHandlerに定義があるので、マッピングしなくても使えます。