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
iOSのWebViewとClipboardAPI / WebView and Clipboar...
Search
dojineko
May 29, 2024
Technology
0
54
iOSのWebViewとClipboardAPI / WebView and ClipboardAPI on iOS
dojineko
May 29, 2024
Tweet
Share
More Decks by dojineko
See All by dojineko
最近のUnityとVRChat / About Unity and VRChat recently
dojineko
0
140
WebXRでポートフォリオを作ろう/Let's make your portfolio with WebXR!
dojineko
0
160
ペパボ ホスティング事業部のWebフロントエンドについて 2022 / About Web Frontend of Pepabo Hosting division 2022
dojineko
1
9.2k
Viteはいいぞ/Vite is Good
dojineko
1
730
はじめてでもできた!VR登壇への道 / Let's VR speech!
dojineko
0
410
gRPC-WEBを使ったWEBアプリ開発/Development web-app with gRPC-WEB
dojineko
1
910
もう俺には関係なくないTypeScript/Our TypeScript
dojineko
3
340
TypeScript ではじめる Clean Architecture / Let's start Clean Architecture with TypeScript
dojineko
2
3.3k
Hosting meets .NET / hosting-meets-dotnet
dojineko
0
690
Other Decks in Technology
See All in Technology
さくらのクラウド 開発の挑戦とその舞台裏
kazeburo
0
300
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
740
MagicPod MCPサーバー開発の裏側とAIエージェント活用の展望
magicpod
0
330
LLMベースAIの基本 / basics of LLM based AI
kishida
9
2.3k
4社統合におけるマスタデータ管理に立ち向かう / Towards master data management in the four-company integration
carta_engineering
0
350
水耕栽培に全部賭けろ
mutsumix
0
170
初参加のハノーバーメッセで感じた世界最大級イベントの熱気とAI活用の未来
hamadakoji
0
110
4月15日の AZ 障害をテクサポの中の人目線で振り返ってみる
kazzpapa3
3
190
thanks_react_router_v7
tascript
0
100
スキーマと型で拓く Full-Stack TypeScript / TSKaigi 2025
altech
2
620
VueUseから学ぶ実践TypeScript #TSKaigi #TSKaigi2025
bengo4com
1
270
SONiCにて使用されているSAIの実際
sonic
0
350
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Making Projects Easy
brettharned
116
6.2k
How to Ace a Technical Interview
jacobian
276
23k
Agile that works and the tools we love
rasmusluckow
329
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Visualization
eitanlees
146
16k
GraphQLとの向き合い方2022年版
quramy
46
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Transcript
iOSのWebViewと ClipboardAPI 2024-05-29 Mirrativ フロントエンドLT会 @dojineko
dojineko • Webフロントエンドエンジニア • 最近Unityをあれしています • たまにVRChatやclusterに 出没するバーチャルネコです • GitHub:
@dojineko • X : @dojinekox
おしながき ➔ iOSにおけるWebViewの ClipboardAPIの制約 ➔ UnityとJavaScriptの連携方法 ➔ WebView内のUnityから クリップボードにアクセスする方法 ➔
まとめ
iOSにおけるWebViewの ClipboardAPIの制約
ClipboardAPIについて • クリップボードの操作をするための標準API • JavaScriptを使ってコピーとペーストの操作ができる
iOS WebViewにおける課題 (1) • iOS の WebView内では任意のタイミングで Clipboard APIを実行できない •
JavaScript実装から ClipboardAPI の Read/Write を 実行しようとしたとき Promise の Reject が発生する ◦ つまり標準APIをつかってコピー/ペーストができない ◦ iOSのプライバシー/セキュリティのための措置と思われる • Androidであれば特に制限なく使用できる
iOS WebViewにおける課題 (2) • WebView内ではOSのコピペ機能も同じく 制限がされておりコピーが機能しない • 一方共有メニューのコピーは 別扱いのようで選択したテキストの 内容を取得できる
• ペーストに関してはテキストボックスであ れば可能の様子 ✅こちらは使用可能 ❌こちらは使用不可
UnityとJavaScriptの連携方法
None
UnityとJavaScriptの連携方法 (1) • UnityにはWebGLビルドの際にブラウザ側の実装を利用するための 仕組みが備わっている • 「.jslib」という拡張子で Assets/Plugins ディレクトリ配下に配置 すると使用できる
◦ 拡張子は違うものの通常のJavaScriptと同じように扱って良い • 利用できるJavaScriptはUnityで使用されているEmscriptenのバー ジョンの関係により一部の文法とAPIの利用ができない
• UnityとJavaScriptの相互運用時に、実装をまたいで数値以外の値を 渡す場合は変換処理が必要になる ◦ 関数に文字列を渡した場合、文字列に対応するポインタが JavaScirpt実装に対して数値として渡される ◦ 渡された文字列を参照するにはポインタから文字列を参照する 必要がある •
UnityのバージョンによってJavaScriptからC#の関数を呼び出す場 合にWebAssembly.WasmTableを使う場合と使わない場合がある UnityとJavaScriptの連携方法 (2)
細かいところはこちらをどうぞ
WebView内のUnityから クリップボードにアクセスする方法
どうやって課題を回避したか • OSの制限でWebView内でのClipboardAPIを直接使用できない ◦ ワンタップでコピペするような機能は実装できない • しかし... ◦ WebView内のテキストボックスへはペーストができる ◦
さらにOSの共有機能を組み合わせて使えばコピーができる • 若干の手数は増えるものの(デバッグ用途であれば) 許容できる程度の煩わしさで回避できそう
WebView TextBox (HTML) おはようございます コピーの場合 コピーさせたい文字列を Unityの実装からWebViewの テキストボックスに送信する 最終的なコピー操作は 共有メニューを介して行う
WebView TextBox (HTML) おはようございます ペーストの場合 貼り付けた文字列を JavaScriptを介して Unityに送信する ペーストしたい文字列を WebView内の
テキストボックスに貼り付ける
まとめ
まとめ • WebView内の標準APIはOSによる制限が一部発生することがある ◦ Unity WebGLもWebView内で動いていれば影響を受ける ◦ 今回で言えばClipboardAPIの利用ができない状態だった • UnityとWebの相互運用を駆使すると
WebブラウザやWebViewへのデータ送信ができる • OS自体の機能を更に組み合わせれば使い所は選ぶが 標準APIの制限を迂回して目的を達成できる...かもしれない
希望は残っているよ どんなときにもね
None