웹뷰 히스토리 스택 얻는 방법
웹뷰앱 개발중 Back 키를 눌러도 이전 페이지로 넘어가지 않고
계속 같은 페이지만 불러오는 현상이 발생하였는데,
원인을 몰라 일주일정도를 고민했던 경험이 있었습니다.
PC 웹 페이지 에서 테스트를 하면 문제가 없었으므로,
웹뷰단의 문제라고 생각했고 이러한 생각이 원인을 찾기 더욱 힘들게 했었는데요,
일주일이 넘는 고민 끝에 웹뷰의 백스택이 어떻게 쌓이는지 보았고 원인을 찾게되었습니다.
원인은 웹뷰로 로드되는 URL이 "https://www.~" 형식으로 들어오면 웹뷰가 다시 "https://m.~" 형식의 URL로
리다이렉트 시키고 있었고 그렇기때문에 Back 키를 누르면 다시 "https://www.~" 페이지로 돌아가고 이 페이지는
다시 "https://m.~"페이지로 리다이렉트 시키는 무한루프가 발생했던 것 입니다.
그래서 웹개발자분께 앱에서 페이지를 요청할 시 처음부터 "https://m.~"의 URL로 달라고 요청해서 해결했었습니다.
아래는 제가 사용한 테스트 코드입니다.
JAVA
// 웹뷰 히스토리 스택 로그 찍기.
void getBackForwardList(WebView webView) {
WebBackForwardList currentList = webView.copyBackForwardList();
int currentSize = currentList.getSize();
for (int i = 0; i < currentSize; ++i) {
WebHistoryItem item = currentList.getItemAtIndex(i);
String url = item.getUrl();
Log.d(TAG, "The URL at index: " + i + " is " + url);
}
}
테스트 소스
Kotlin
// 웹뷰 히스토리 스택 로그 찍기.
fun getBackForwardList(webView: WebView) {
val currentList = webView.copyBackForwardList()
val currentSize = currentList.size
for (i in 0 until currentSize) {
val item = currentList.getItemAtIndex(i)
val url = item.url
Log.d(TAG, "The URL at index: $i is $url")
}
}
테스트소스
(자바와 코틀린의 메소드 선언 위치차이가 있는데 inner class와 nested class의 차이점 입니다)
'안드로이드' 카테고리의 다른 글
[Android] Toast 메시지 중첩 호출 방지하기 (0) | 2021.04.05 |
---|---|
[Android] 안드로이드 고유 식별자 (unique identifiers) (0) | 2021.03.24 |
[Android] Release 모드로 빌드하기 (0) | 2021.03.22 |
[Android] 중복 클릭 방지 하기 (0) | 2021.03.22 |
[Android] 데이터 바인딩 적용법 변경사항 (0) | 2021.03.10 |