回答編集履歴
2
ご回答を修正
test
CHANGED
@@ -1,8 +1,72 @@
|
|
1
|
-
|
1
|
+
Web側のみで対応するのは難しいように思えます。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
もし、アプリ側を修正してもよいのであれば、`shouldOverrideUrlLoading()`を独自実装した`WebViewClient`を`WebView`に設定することにより、実現できます。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
```Java
|
10
|
+
|
11
|
+
public class MyWebViewClient extends WebViewClient {
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
@Override
|
16
|
+
|
17
|
+
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
18
|
+
|
19
|
+
Uri uri = request.getUri();
|
20
|
+
|
21
|
+
String uriPath = uri.getPath();
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
if(!uriPath.startsWith("《サイトのルートURL》")){
|
26
|
+
|
27
|
+
Intent intent = new Intent(Intent.ACTION_VIEW, uri)
|
28
|
+
|
29
|
+
view.getContext().startActivity(intent);
|
30
|
+
|
31
|
+
return true;
|
32
|
+
|
33
|
+
}
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
return false;
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
}
|
42
|
+
|
43
|
+
```
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
```Java
|
48
|
+
|
49
|
+
//WebViewを表示するアクティビティ内
|
50
|
+
|
51
|
+
webView.setWebViewClient(new MyWebViewClient());
|
52
|
+
|
53
|
+
```
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
---
|
58
|
+
|
59
|
+
以下は、誤回答です。
|
60
|
+
|
61
|
+
Android版Chromeであれば、下記のように動作しますが、WebViewでは動作しないようです。動作させるには、前述のように`shouldOverrideUrlLoading()`で制御する必要があります。
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
~~intentスキームのURLを用いれば実現できそうです。~~
|
66
|
+
|
67
|
+
|
68
|
+
|
5
|
-
次の形式のURLを、AndroidのWebViewで開こうとすると、VIEWアクションに対応するアプリが起動します。
|
69
|
+
~~次の形式のURLを、AndroidのWebViewで開こうとすると、VIEWアクションに対応するアプリが起動します。~~
|
6
70
|
|
7
71
|
```
|
8
72
|
|
@@ -12,7 +76,7 @@
|
|
12
76
|
|
13
77
|
|
14
78
|
|
15
|
-
例えば、この質問の場合、次のように指定すればOKです。
|
79
|
+
~~例えば、この質問の場合、次のように指定すればOKです。~~
|
16
80
|
|
17
81
|
``` html
|
18
82
|
|
@@ -22,15 +86,15 @@
|
|
22
86
|
|
23
87
|
|
24
88
|
|
25
|
-
ただ、`<a>`タグにURLを直接指定すると、通常のブラウザで遷移できなくなってしまいます。なので、通常のブラウザも考慮する場合、何らかの方法でAndroidアプリからのアクセスであるか判別し、遷移先を制御する必要があります。
|
89
|
+
~~ただ、`<a>`タグにURLを直接指定すると、通常のブラウザで遷移できなくなってしまいます。なので、通常のブラウザも考慮する場合、何らかの方法でAndroidアプリからのアクセスであるか判別し、遷移先を制御する必要があります。~~
|
26
90
|
|
27
91
|
|
28
92
|
|
29
|
-
Androidアプリからのアクセスであるか判別するには、JavaScriptでユーザーエージェントによる判別を行うがお手軽です。ただ、一部のAndroid端末で、内蔵ブラウザとWebViewのユーザーエージェントが同じであるため([参考2](https://www.au.com/developer/android/kishu/ua/))、正確な判定ができません。
|
93
|
+
~~Androidアプリからのアクセスであるか判別するには、JavaScriptでユーザーエージェントによる判別を行うがお手軽です。ただ、一部のAndroid端末で、内蔵ブラウザとWebViewのユーザーエージェントが同じであるため([参考2](https://www.au.com/developer/android/kishu/ua/))、正確な判定ができません。~~
|
30
94
|
|
31
95
|
|
32
96
|
|
33
|
-
質問の前提を破ることになりますが、通常のブラウザも考慮する場合、AndroidアプリのWebViewのユーザーエージェントに独自の文字列を付与するなどの対応が必要かもしれません。
|
97
|
+
~~質問の前提を破ることになりますが、通常のブラウザも考慮する場合、AndroidアプリのWebViewのユーザーエージェントに独自の文字列を付与するなどの対応が必要かもしれません。~~
|
34
98
|
|
35
99
|
|
36
100
|
|
1
VIEWアクションを用いた方法に変更
test
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
1
|
+
intentスキームのURLを用いれば実現できそうです。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
次の形式のURLを、AndroidのWebViewで開こうとすると、
|
5
|
+
次の形式のURLを、AndroidのWebViewで開こうとすると、VIEWアクションに対応するアプリが起動します。
|
6
6
|
|
7
7
|
```
|
8
8
|
|
9
|
-
intent://《遷移先URL(スキーム除く)》#Intent;scheme=《遷移先URLのスキーム》;
|
9
|
+
intent://《遷移先URL(スキーム除く)》#Intent;scheme=《遷移先URLのスキーム》;action=android.intent.action.VIEW;end
|
10
10
|
|
11
11
|
```
|
12
12
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
``` html
|
18
18
|
|
19
|
-
<a href="intent://teratail.com/questions/156743#Intent;scheme=https;
|
19
|
+
<a href="intent://teratail.com/questions/156743#Intent;scheme=https;action=android.intent.action.VIEW;end">外部リンク</a>
|
20
20
|
|
21
21
|
```
|
22
22
|
|