안녕하세요.
안드로이드 웹뷰 관련 질문 있습니다..
문제
안드로이드 웹뷰에서 자식창에서 부모창을 참조하지 못하는 문제가 습니다
처음 자식창을 오픈했을때는 부모창을 잘 참조를 하는데, 해당 페이지에서 다른 페이지(휴대폰인증)로 이동했다가 다시 외부에서 저희 서버 콜백url호출하여 해당 자식 페이지로 왔을때 참조를 못하고 있습니다
그리고 웹 브라우저에서는 문제없이 잘 참조하는데 안드로이드 웹뷰에서만 참조하지 못하고 있어요.
간략히 다시 정리를 하자면,
1. 부모창에서 자식창 오픈
--> 이 경우에는 자식창에서 부모창을 참조가 가능합니다
2. 자식창에서 다른 외부 페이지(휴대폰인증)로 이동
3. 외부페이지에서 자식창 페이지로 다시 이동
--> 이 부분에서 아래와 같은 에러가 발생합니다
`"Uncaught TypeError: Cannot read properties of null (reading 'document')"`
시도
1. 외주 앱개발자님이 opener 문법자체가 틀리신거 같다고 하여 자바스크립트로 대체해 시도해봤습니다.
2. 원래 jQuery를 사용했는데 jQuery 불러오는데에 문제가 있을 수도 있다고 생각하여 전부 자바스크립트 코드로 짜서 시도해봤습니다
자식창의 자바스크립트 코드는 아래와 같습니다
```javascript
<script th:inline="javascript">
document.addEventListener("DOMContentLoaded", function(){
console.log("자식창에서 opener.document");
console.log(opener.document); // document 호출 에러발생
opener.document.getElementById('encInfo').value = [[${encPriInfo}]];
opener.document.getElementById('phoneOrIpin').value = 'phone';
opener.document.getElementById('authFlag').value = '1';
var trigger = opener.document.getElementById('authFlag');
var customEvent = document.createEvent('Event');
customEvent.initEvent('change', false, true);
trigger.dispatchEvent(customEvent);
// 아래는 외주 앱개발자님이 틀린거 같다고 한 코드
// opener.$('body').find("#encInfo").val(encPriInfo);
// opener.$('body').find("#phoneOrIpin").val('phone');
// opener.$('body').find("#authFlag").val('1').trigger('change');
});
</script>
```
웹뷰에서는 자바스크립트 처리를 위하여 아래처럼 Setting이 되어있는 상태입니다
```java
WebView subView = new WebView(view.getContext());
subView.getSettings().setJavaScriptEnabled(true);
subView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
subView.getSettings().setDomStorageEnabled(true);
subView.getSettings().setSupportMultipleWindows(true);
subView.getSettings().setUseWideViewPort(true);
subView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
subView.getSettings().setLoadWithOverviewMode(true);
```
onCloseWindow 메소드는 아래와 같이 되어있습니다.
```java
/* ...MainActivity 코드생략... */
@Override
public void onCloseWindow(WebView window) {
AppUtil.log(MainActivity.this, "onCloseWindow2222");
window.setVisibility(View.GONE);
window.destroy();
super.onCloseWindow(window);
}
/* ... */
```
다시 정리하자면,
1. 웹뷰에서 처음에 자식창을 열면 부모창을 잘 참조하지만 다른 페이지로 이동후에 다시 호출이 되었을때 부모창을 호출하지 못하는 문제가 발생합니다
2. 크롬, 웨일 등 크로미움 기반 웹브라우저에서 문제없이 잘 작동하고, 안드로이드 휴대폰 기본 내장 삼성 인터넷 브라우저에서도 문제없이 잘 작동합니다만 앱에서만 작동하지 않습니다.
1주일째 이 부분을 해결하지 못하고있어 생각나시는 아주 조그마한 의견이라도 주신다면 정말 감사하겠습니다..ㅠㅠ