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
80
iOSのWebViewとClipboardAPI / WebView and ClipboardAPI on iOS
dojineko
May 29, 2024
Tweet
Share
More Decks by dojineko
See All by dojineko
2025-03-12 WebXRのいま(2025Q1) / About WebXR (2025Q1)
dojineko
0
570
最近のUnityとVRChat / About Unity and VRChat recently
dojineko
0
170
WebXRでポートフォリオを作ろう/Let's make your portfolio with WebXR!
dojineko
0
180
ペパボ ホスティング事業部のWebフロントエンドについて 2022 / About Web Frontend of Pepabo Hosting division 2022
dojineko
1
9.6k
Viteはいいぞ/Vite is Good
dojineko
1
770
はじめてでもできた!VR登壇への道 / Let's VR speech!
dojineko
0
450
gRPC-WEBを使ったWEBアプリ開発/Development web-app with gRPC-WEB
dojineko
1
980
もう俺には関係なくないTypeScript/Our TypeScript
dojineko
3
370
TypeScript ではじめる Clean Architecture / Let's start Clean Architecture with TypeScript
dojineko
2
3.4k
Other Decks in Technology
See All in Technology
オブザーバビリティが育むシステム理解と好奇心
maruloop
3
1.9k
【SORACOM UG Explorer 2025】さらなる10年へ ~ SORACOM MVC 発表
soracom
PRO
0
200
知覚とデザイン
rinchoku
1
710
[Journal club] Thinking in Space: How Multimodal Large Language Models See, Remember, and Recall Spaces
keio_smilab
PRO
0
110
AI機能プロジェクト炎上の 3つのしくじりと学び
nakawai
0
180
仕様駆動開発を実現する上流工程におけるAIエージェント活用
sergicalsix
10
5.1k
戦えるAIエージェントの作り方
iwiwi
19
8.7k
現場の壁を乗り越えて、 「計装注入」が拓く オブザーバビリティ / Beyond the Field Barriers: Instrumentation Injection and the Future of Observability
aoto
PRO
1
760
SOTA競争から人間を超える画像認識へ
shinya7y
0
660
マルチエージェントのチームビルディング_2025-10-25
shinoyamada
0
240
InsightX 会社説明資料/ Company deck
insightx
0
150
OpenCensusと歩んだ7年間
bgpat
0
300
Featured
See All Featured
Code Review Best Practice
trishagee
72
19k
Documentation Writing (for coders)
carmenintech
76
5.1k
Keith and Marios Guide to Fast Websites
keithpitt
412
23k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Statistics for Hackers
jakevdp
799
220k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
900
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Six Lessons from altMBA
skipperchong
29
4k
Embracing the Ebb and Flow
colly
88
4.9k
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