본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] ~Jelly Bean WebView vs. Kitkat WebView.

by 돼지왕 왕돼지 2014. 4. 10.
반응형


 [android] ~Jelly Bean WebView  vs.  Kitkat WebView.

 

[android] ~Jelly Bean WebView  vs.  Kitkat WebView.


http://stefanodacchille.github.io/blog/2014/02/23/webview-explorations/


Hit test result.


WebView 에서 어떤 element 를 touch 했을 경우,

WebView.getHitTestResult() 를 호출하면 hitTestResult object 가 return 된다.


HitTestResult 에는 element type 과 url 값이 들어있다.

예를 들어 <a> tag 를 touch 했을 때는 WebView.HitTestResult.SRC_ANCHOR_TYPE 이 type 으로 return 된다.


기존 WebView 는 이 녀석이 지원하지 않는 element 를 touch 하면 null 로 return 되었지만,

Chromium-based Kitkat WebView 는 모든 element 에 대해 null 이 아닌 정상적인 값이 나온다.




WebView history.


WebView 는 WebBackForwardList 라는 녀석에 방문했던 모든 url 을 저장한다.

WebView.copyBackForwardList() 함수를 통해 이 값을 받아올 수 있다.


WebView.goBack() 를 호출한 후 WebBackForwardList.getCurrentItem() 을 호출하면..


기존 WebView 는 goBack 처리되기 전의 url 이 return 되고,

Kitkat WebView 에서는 goBack 처리된 url 이 return 된다.




Javascript Links


<a href="javascript:;">...</a> 와 같이 a 가 url 이 아닌 javascript function 이 들어가 있는경우,

Kitkat 에서는 WebViewClient.onPageFinished() 가 불린다.




API additions.


- Remote Debugging 가능.

https://developers.google.com/chrome-developer-tools/docs/remote-debugging



- WebView.evaluateJavascript() 함수가 추가.

실행하고픈 Script 를 String 형태로 넣고, ValueCallback 을 함꼐 넣어주어 수행 가능하다.




Compatibility 를 지키며 변화된 API 적용하기.


if else 등으로 버전분기하기보다는 API 를 encapsulation 을 이용하여 깔끔하게 처리하는 방법도 있다.

이는 위의 출처를 확인하시길.






반응형

댓글