2019年10月4日金曜日

【UWP】UWPアプリーWebView間でデータの受け渡しする方法


いよいよ.Net core3.0が正式リリースされました。

その中で一番気になる技術はやはりクロスプラットフォーム化に進んでいるというところです。

今までクロスプラットフォーム化でネックになっているのがGUI画面とハード依存周り。

Gnome、KDE、Win、Mac、・・・様々なGUIが異なる実装をしているから画面回りを1つにまとめられない。。

Windows/Mac/Linux・・・と足回りも異なるOSだからUSBドライバ1つとっても実装を分けないといけない。。

考え出すと切りがないのが現状だったりします。

そこを打破すべくMSが推し進めているのが.Net coreプラットフォーム。

こいつを使えば足回りは1つで統一だぜヒャッハー!ってなるんだけど、
画面回りだけは、
 XAMLの場合はXamarinで統一?
 HTML/JS/CSSの場合はElectron、Blazorで統一?

まだ安定してませんね。
でもXAML to HTML などのコンバーターがいずれ出てくるでしょうが
今回は後者のHTML/JS/CSSを使った場合についてです。

このケースはXAMLでWebViewを張り付けて用意したWebページを表示して
データ操作をしたりしなかったりするんですが、
WebView↔C# の間でデータをやり取りを行う必要があるわけです。

最近のWebフレームワークなAngularやReactなどはWebサーバと通信するんですが
アプリと通信します。

そのインターフェイスに必要になる技術がこちら。

★C#→Javascriptのコードを呼び出す場合
 var data = await web.InvokeScriptAsync("eval", new string[] { "testfunc();" });

★Javascript→C#へ通知する場合
 window.external.notify("foo bar");
 ※C#側:WebviewのScriptNotifyイベントに通知されます。

この2つです。

使うときの注意点は、
受け渡し可能なデータ型は「文字列」のみであること。

早くBlazorのクライアントサイドが正式リリースされないかなー


【参考URL】
https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2013/11/27/webview-10/

0 件のコメント:

Androider