print( sjw.iq == 200) output : true

[Android] Webview 에서 javascript open 오류 본문

Android

[Android] Webview 에서 javascript open 오류

sjwiq200 2019. 6. 24. 14:08
728x90
반응형

안녕하세요~! 

오늘은 안드로이드 웹뷰에 대해서 포스팅을 하려고 해요!

 

저희 서비스에 다음 우편검색을 통해서 안드로이드에서 웹뷰를 띄워 서비스를 하는 부분이 있는데요!

 

모든 기기에서 정상 작동하는 것으로 알고 있었는데...

 

오늘 확인해보니 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를 사용하려고 합니다!

 

그럼 안녕히 계세요~!

728x90
반응형
Comments