일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- AWS
- python
- nginx
- alb
- PostgreSQL
- Vue.js
- selenium
- Android
- flutter
- Passport
- MYSQL
- https
- FCM
- Laravel
- php
- SSH
- MacOS
- 해시키
- 구글 API
- node
- OAuth
- pip
- 안드로이드
- 파이썬
- Prometheus
- window
- ubuntu
- Cordova
- Vue
- mac
- Today
- Total
print( sjw.iq == 200) output : true
[Android] Webview 에서 javascript open 오류 본문
안녕하세요~!
오늘은 안드로이드 웹뷰에 대해서 포스팅을 하려고 해요!
저희 서비스에 다음 우편검색을 통해서 안드로이드에서 웹뷰를 띄워 서비스를 하는 부분이 있는데요!
모든 기기에서 정상 작동하는 것으로 알고 있었는데...
오늘 확인해보니 V20에서만 웹뷰가 뜨지 않는 현상이 있었습니다.
해당 소스코드를 먼저 보여드릴게요!
우선 html 코드입니다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
new daum.Postcode({
oncomplete: function(data) {
if(data.userSelectedType=="R"){
if(data.autoJibunAddress) {
window.testApp.setAddress(data.zonecode, data.autoJibunAddress, data.buildingName);
} else {
window.testApp.setAddress(data.zonecode, data.jibunAddress, data.buildingName);
}
}
else{
window.testApp.setAddress(data.zonecode, data.jibunAddress, data.buildingName);
}
}
}).open();
</script>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs |
그리고 다음은 안드로이드 소스코드인데요!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
public class SearchAddressActivity extends AppCompatActivity {
private WebView daum_webView;
LoadingDialog loadingDialog;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_address);
daum_result = (TextView) findViewById(R.id.daum_result);
// WebView 초기화
init_webView();
// 핸들러를 통한 JavaScript 이벤트 반응
handler = new Handler();
}
public void init_webView() {
// WebView 설정
daum_webView = (WebView) findViewById(R.id.daum_webview);
daum_webView.setWebChromeClient(new WebChromeClient());
// JavaScript 허용
daum_webView.getSettings().setJavaScriptEnabled(true);
// JavaScript의 window.open 허용
daum_webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
// JavaScript이벤트에 대응할 함수를 정의 한 클래스를 붙여줌
daum_webView.addJavascriptInterface(new AndroidBridge(), "testApp");
/* 2019.03.21 sjwiq200 Cross App Scripting 대비 */
daum_webView.getSettings().setDatabaseEnabled(false);
daum_webView.getSettings().setAllowFileAccess(false);
daum_webView.getSettings().setDomStorageEnabled(false);
daum_webView.getSettings().setAppCacheEnabled(false);
// web client 를 chrome 으로 설정
daum_webView.setWebChromeClient(new WebChromeClient());
// webview url load.
daum_webView.loadUrl(BuildConfig.BASEURL + "postCode.html");
}
private class AndroidBridge extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!url.startsWith(BuildConfig.BASEURL)) {
url = BuildConfig.BASEURL + "postCode.html";
}
view.loadUrl(url);
return true;
}
@JavascriptInterface
public void setAddress(final String arg1, final String arg2, final String arg3) {
handler.post(new Runnable() {
@Override
public void run() {
}
});
}
}
}
|
cs |
처음에는 안드로이드 웹뷰가 말이 많다보니까 안드쪽 코드에서 문제가 있는줄 알았는데...
전혀 해결이 안되고 있었습니다.
ㅠㅠ 누구는 되고 누구는 안되고, 어쩔때는 되고 어쩔때는 안되고....
이럴때가 가장 눈물이 많이 나는거 같은데요...
https://github.com/daumPostcode/QnA/issues?page=1&q=is%3Aissue+is%3Aopen
daumPostcode/QnA
Daum 우편번호 서비스 Q&A. Contribute to daumPostcode/QnA development by creating an account on GitHub.
github.com
여기 페이지를 봐보니... 저와 같은 증상을 가진 분들이 꽤 계시더라구요!
근데 담당자분은 embed 방식으로 하는 방법을 알려주셨습니다!
그래서 html 코드를 바꿨는데요!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<!DOCTYPE html>
<html lang="en">
<style>
* {
margin:0;
padding:0;
}
html {
width: 100%;
height : 100%;
overflow-y:hidden;
}
body {
width : 100%;
height : 100%;
overflow : hidden;
}
iframe {
overflow : hidden;
}
</style>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
new daum.Postcode({
oncomplete: function(data) {
if(data.userSelectedType=="R"){
if(data.autoJibunAddress) {
window.testApp.setAddress(data.zonecode, data.autoJibunAddress, data.buildingName);
} else {
window.testApp.setAddress(data.zonecode, data.jibunAddress, data.buildingName);
}
}
else{
window.testApp.setAddress(data.zonecode, data.jibunAddress, data.buildingName);
}
},
width : '100%',
height : '100%',
}).embed(document.body);
</script>
</body>
</html>
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs |
다음과 같이 바꿔주니 ㅠㅠ 모든기기에서 웹뷰가 정상적으로 보이게 되네요~!
다음에 다른 웹뷰를 사용할 일이 있을때도 open 대신에 embed를 사용하려고 합니다!
그럼 안녕히 계세요~!
'Android' 카테고리의 다른 글
[Android] error:protocol fault (couldn't read status) (0) | 2020.01.21 |
---|---|
[Android] 더블탭, 더블클릭 구현 (GestureDetector를 사용하지 않고 단순 코드) (0) | 2019.07.23 |
[안드로이드] 구글맵 PlayStore 등록 시 맵 안보이는 현상 (0) | 2019.03.15 |
[안드로이드] 구글 맵 SHA-1 인증서 지문 등록 (1) | 2019.02.28 |
[안드로이드] 카카오 해시 키 등록 (3) | 2019.02.28 |