質問編集履歴

1

aaa

2021/11/29 00:06

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,105 +1,17 @@
1
- ## やりたいこと
1
+ つの要点を抑えると回答が得られすくなます。
2
2
 
3
3
 
4
4
 
5
- iOSアプリ(Objective-C)およびAndroidアプリ(Java)を作成ます。
5
+ 前提・実現こと
6
6
 
7
- アプリの中でWebViewを使用しており、Obj-C/Javaの変数をWebView内のJavaScriptに受け渡したいと思っていますが、
8
-
9
- Obj-C/Javaの値取得るJSの処理iOS/Androidで同じにしたいと考えてい
7
+ (例)PHP(CakePHP)で●●なシステム作っていま。 ■■な機能実装したいのですがうく動きません
10
8
 
11
9
 
12
10
 
13
- ## AndroidでJavaの値をJSに渡す方法
11
+ 発生している問題・エラーメッセージ
14
12
 
13
+ 問題が発生するまでの流れ・手順
15
14
 
15
+ ソースコード
16
16
 
17
- Javaの変数をJSに受け渡す際には、 `addJavascriptInterface` の仕組みを利用しています。
18
-
19
- https://qiita.com/hkusu/items/3777b75aa5bf130e9202
20
-
21
-
22
-
23
- この仕組を利用して、JS側では
24
-
25
- ```js
26
-
27
- var nativeValue = android.getNativeValue(); // getNativeValueはJavaで定義してある
28
-
29
- ```
30
-
31
- のように呼び出しを行っています。
32
-
33
-
34
-
35
- ## iOSでObj-Cの値をJSに渡す方法
36
-
37
-
38
-
39
- Obj-Cの変数をJSに受け渡す際には、 `webkit.messageHandlers.xxx.postMessage` の仕組みを利用しようと考えています。
40
-
41
- https://qiita.com/rc_code/items/8928bf134a1568015ffe
42
-
43
-
44
-
45
- 場合、JS側では
17
+ 問題発生した環境
46
-
47
- ```js
48
-
49
- var nativeValue = webkit.messageHandlers.xxx.postMessage();
50
-
51
- ```
52
-
53
- のような記述をする必要があります。
54
-
55
-
56
-
57
- ## 困っていること
58
-
59
-
60
-
61
- 上記のようにiOS/Androidで、変数を受け渡すだけであってもWebView内で実行するJSに違いが出てしまいます。
62
-
63
- ```js
64
-
65
- var nativeValue = android.getNativeValue(); // Android
66
-
67
- var nativeValue = webkit.messageHandlers.xxx.postMessage(); // iOS
68
-
69
- ```
70
-
71
-
72
-
73
- JSでは、本来はUserAgentを見て以下のように処理を分ければ良いのですが
74
-
75
- ```js
76
-
77
- var nativeValue;
78
-
79
- if (isAndroid) {
80
-
81
- nativeValue = android.getNativeValue();
82
-
83
- } else if (isIOS) {
84
-
85
- nativeValue = webkit.messageHandlers.xxx.postMessage();
86
-
87
- }
88
-
89
- ```
90
-
91
-
92
-
93
- UserAgentは偽装される可能性があるため(今回はそこまで考慮する必要があるので)、上記のUAを使う方法は利用できません。
94
-
95
- そこで、どうにかして iOS/Android どちらでJSを実行した場合でも同じ方法でObj-C/Javaの変数値を取得したいと思っています。
96
-
97
- ```js
98
-
99
- var nativeValue = xxx.getNativeValue(); // iOSでもAndroidでも、この一行だけで済ませたい
100
-
101
- ```
102
-
103
-
104
-
105
- このようなことを実現する方法は無いでしょうか?