Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
iOSのWebViewとClipboardAPI / WebView and Clipboar...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
dojineko
May 29, 2024
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
iOSのWebViewとClipboardAPI / WebView and ClipboardAPI on iOS
dojineko
May 29, 2024
More Decks by dojineko
See All by dojineko
コスパの良いAIの選び方 / Surviving the AI Era on a Budget
dojineko
0
57
ミニPCを買ってみた話/The Story of Buying a Mini PC
dojineko
0
62
WebXRのいま(2025Q1) / About WebXR (2025Q1)
dojineko
0
790
最近のUnityとVRChat / About Unity and VRChat recently
dojineko
0
230
WebXRでポートフォリオを作ろう/Let's make your portfolio with WebXR!
dojineko
0
230
ペパボ ホスティング事業部のWebフロントエンドについて 2022 / About Web Frontend of Pepabo Hosting division 2022
dojineko
1
10k
Viteはいいぞ/Vite is Good
dojineko
1
840
はじめてでもできた!VR登壇への道 / Let's VR speech!
dojineko
0
510
gRPC-WEBを使ったWEBアプリ開発/Development web-app with gRPC-WEB
dojineko
1
1.1k
Other Decks in Technology
See All in Technology
顧客の成果創出とプロダクトの成長を 両立するためのFDE
sansantech
PRO
0
510
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
AIに会社の文脈を理解させる技術~上流工程・非エンジニアにも広げるハーネスエンジニアリング実践~
ochtum
0
190
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
120
Terraformを用いたJamf Pro構成のIaC, GitOps化への挑戦
yukun
0
120
Antigravity SDK for the Java Developer
glaforge
0
240
spanner-autoscalerに学ぶ CRD設計パターン 〜自動化と緊急時対応を両立する Kubernetesコントローラーの作り方〜
tkuchiki
0
210
可視化から始めたAI駆動開発_ochi_ver1.01 / AI-Driven Development Starting with Visualization_ver1.01
yayoi_dd
0
110
20260915deck.gl-raster を使ってみた
rena1208
0
170
Incremental HTTP
kazuho
4
1.5k
PQC移行の今 -- IETF からみた現在地
satokan
4
690
Harness Engineering on Rails
joelq
0
760
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
730
Designing for Timeless Needs
cassininazir
1
510
Paper Plane
katiecoart
PRO
4
53k
sira's awesome portfolio website redesign presentation
elsirapls
0
430
Chasing Engaging Ingredients in Design
codingconduct
0
340
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
We Have a Design System, Now What?
morganepeng
55
8.3k
Music & Morning Musume
bryan
48
7.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Product Roadmaps are Hard
iamctodd
55
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Ruling the World: When Life Gets Gamed
codingconduct
0
380
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