Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HybridWebViewでJSベースのView開発 / Development JavaSc...
Search
Yusuke Yamada
September 28, 2024
Technology
0
880
HybridWebViewでJSベースのView開発 / Development JavaScript based View with HybridWebView
2024/09/28
https://dotnetlab.connpass.com/event/329105/
のLTで発表
Yusuke Yamada
September 28, 2024
Tweet
Share
More Decks by Yusuke Yamada
See All by Yusuke Yamada
VS CodeとGitHub Copilotで爆速開発!アップデートの波に乗るおさらい会 / Rapid Development with VS Code and GitHub Copilot: Catch the Latest Wave
yamachu
3
1.1k
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
8
6.9k
Enterprise以外でもMergeQueueしたい! / Use Merge Queue without GitHub Enterprise
yamachu
0
270
Web開発者におくる .NET 7時代の .NET WebAssemblyとの付き合い方
yamachu
0
170
Other Decks in Technology
See All in Technology
SQLだけでマイグレーションしたい!
makki_d
0
1.2k
MariaDB Connector/C のcaching_sha2_passwordプラグインの仕様について
boro1234
0
1k
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
180
New Relic 1 年生の振り返りと Cloud Cost Intelligence について #NRUG
play_inc
0
240
LayerX QA Night#1
koyaman2
0
260
AIBuildersDay_track_A_iidaxs
iidaxs
4
1.3k
Agent Skillsがハーネスの垣根を超える日
gotalab555
6
4.4k
202512_AIoT.pdf
iotcomjpadmin
0
140
_第4回__AIxIoTビジネス共創ラボ紹介資料_20251203.pdf
iotcomjpadmin
0
140
日本Rubyの会: これまでとこれから
snoozer05
PRO
6
240
意外と知らない状態遷移テストの世界
nihonbuson
PRO
1
260
ESXi のAIOps だ!2025冬
unnowataru
0
370
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
520
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Design in an AI World
tapps
0
100
How Software Deployment tools have changed in the past 20 years
geshan
0
30k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
Color Theory Basics | Prateek | Gurzu
gurzu
0
150
Game over? The fight for quality and originality in the time of robots
wayneb77
1
66
For a Future-Friendly Web
brad_frost
180
10k
Transcript
HybridWebViewで JSベースのView開発 .NETラボ 勉強会 2024年9月 当日LT ちゅうこ / yamachu
自己紹介 経歴 • Xamarin歴 2014- • Microsoft MVP 2018- ちゅうこ
(山田 裕介) GitHub: yamachu X(Twitter): y_chu5 趣味 • ポケカ、ゲーム • GitHubのExploreのだら見
HybridWebView • WebView 内のコンテンツの JavaScript コードと、 ホストの C# コード間の通信を可能にするコントロール ◦
例えば、WebView 上の React アプリケーションと C# 間で通信が可能に • アプリの UI の一部として利用が可能 ◦ HybridWebView 自体がコントロールであるため、 .NET MAUIの他のコントロールと共存が可能 ◦ 複雑な UI の実装を JavaScript アプリケーションに委譲し、 ロジック部分を C# のような使い方も可能 • .NET 9 Preview 7 以降で利用可能
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
.NET MAUI プロジェクトの作成 $ dotnet --version 9.0.100-rc.1.24452.12 $ dotnet workload
install maui $ dotnet new maui
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 C# -> JavaScript 方向のメッセージの受信
e.detail.message に C# からのメッセージが含まれる
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 JavaScript -> C# 方向のメッセージの送信
後述する HybridWebView.js で定義した SendRawMessage を利用する
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 C# -> JavaScript 方向のメッセージの
受信ハンドラの設定 初期化時に一度実行され、以後触る必要はない
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 JavaScript -> C# 方向のメッセージの送信
プロジェクトに Web アプリケーションのコンテンツを 追加 https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview?view=net-mau i-9.0&viewFallbackFrom=net-maui-8.0 C# から JavaScript コードを実行するのに使用
JavaScript コードから触る必要はない
プロジェクトに Web アプリケーションのコンテンツを 追加 Resources/Raw/wwwroot 以下に 先ほど作った 2 つのファイルを配置 •
index.html • scripts/HybridWebView.js
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
HybridWebView コントロールの配置 MainPage.xaml の中身を以下のように変更 コードビハインドにハンドラーがないため Error が出るが、一旦無視
HybridWebView を試す 1. .NET MAUI プロジェクトの作成 2. プロジェクトに Web アプリケーションのコンテンツを追加
3. HybridWebView コントロールの配置 4. HybridWebView API を使用するコードの追加
HybridWebView API を使用するコードの追加 MainPage.xaml.cs の中身を以下のように変更
HybridWebView API を使用するコードの追加 MainPage.xaml.cs の中身を以下のように変更 .NET MAUI の Button コントロールの
Click Handler JavaScript アプリケーションに対し、文字列を含むメッセージを送信
HybridWebView API を使用するコードの追加 MainPage.xaml.cs の中身を以下のように変更 JavaScript アプリケーションからのメッセージを受信するハンドラ e.Message に受信したメッセージが含まれる
完成したアプリがこちら
紹介していない機能 • C# から JavaScript コードを呼び出す ◦ EvaluateJavaScriptAsync ◦ InvokeJavaScriptAsync
macOS Sequoia ユーザ向けの注意点 .NET 9 RC 1 時点では、HTML コンテンツのホストにアドレスの 0.0.0.0
を使用 0.0.0.0 へのアクセスに制限が加わったため以下の Workaround が必要 (追記) https://github.com/dotnet/maui/pull/24884 0.0.0.1 になるそうです https://github.com/dotnet/maui/issues/23390#issuecomment-2202295194 MauiProgram.cs に以下を追記
まとめ • HybridWebView は JavaScript と C# の通信手段を与える • アプリの一部として利用できるため、
.NET MAUI のコントロールとの共存は容易 • アプリの View に JavaScript アプリケーションを採用するの も現実的に
参考リポジトリ 今回の流れに沿ったサンプルプロジェクト https://github.com/yamachu/sample-hybrid-web-view ReactやVueを利用した発展的なプロジェクト(宣伝) https://github.com/yamachu/PokedexWithDotnetWebTechnologies 公式ドキュメント https://learn.microsoft.com/ja-jp/dotnet/maui/user-interface/controls/hybridwebview