Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
890
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
7k
Enterprise以外でもMergeQueueしたい! / Use Merge Queue without GitHub Enterprise
yamachu
0
280
Web開発者におくる .NET 7時代の .NET WebAssemblyとの付き合い方
yamachu
0
170
Other Decks in Technology
See All in Technology
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
202512_AIoT.pdf
iotcomjpadmin
0
190
「違う現場で格闘する二人」——社内コミュニティがつないだトヨタ流アジャイルの実践とその先
shinichitakeuchi
0
240
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
490
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
620
Oracle Cloud Infrastructure:2025年12月度サービス・アップデート
oracle4engineer
PRO
0
240
スクラムマスターが スクラムチームに入って取り組む5つのこと - スクラムガイドには書いてないけど入った当初から取り組んでおきたい大切なこと -
scrummasudar
2
1.8k
「アウトプット脳からユーザー価値脳へ」がそんなに簡単にできたら苦労しない #RSGT2026
aki_iinuma
9
4.6k
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
190
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
12k
歴史から学ぶ、Goのメモリ管理基礎
logica0419
12
2.6k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
110
Build your cross-platform service in a week with App Engine
jlugia
234
18k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Mobile First: as difficult as doing things right
swwweet
225
10k
Between Models and Reality
mayunak
1
160
Optimizing for Happiness
mojombo
379
70k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
The World Runs on Bad Software
bkeepers
PRO
72
12k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
Building Applications with DynamoDB
mza
96
6.9k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
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