동영상에서 설명드린 것 처럼, 이 새로운 웹뷰는 안드로이드 4.4 이상 버전에는 모두 기본으로 탑재되며, 기존 앱들도 별다른 수정 없이 새로운 웹뷰의 혜택을 바로 누릴 수 있습니다. 다만, 몇 가지 기존과 동작 방식이 변경된 부분이 있어 이를 다시 한번 정리해 보았습니다.
- 웹뷰의 기본 USER_AGENT 값에 크롬 버전이 포함되도록 변경되었습니다. 예를 들어 다음과 같습니다.
- Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16H) AppleWebKit/537.36(KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
- 다른 View 와 마찬가지로, UI 스레드가 아닌 곳에서 loadData 등의 메서드를 통해 웹뷰의 내용을 변경할 수 없습니다.
- 비동기 자바 스크립트 함수 호출등을 이유로 UI 스레드를 블락해선 안됩니다. 대신, 자바스크립트 함수 호출의 결과를 받아 볼 수 있는 evaluateJavascript() 메서드가 추가되었습니다.
- 사용자가 URL 을 클릭하는 이벤트를 오버라이드 하여 원하는 작업을 수행하고자 하는 경우, 사용자 정의 URL 은 RFC 3986 표준에 의거한 유효한 URL 을 사용해야 합니다. 그렇지 않은 경우 shouldOverrideUrlLoading() 메서드가 호출 되지 않거나, 의도하지 않은 형태의 URL 로 변경된 결과를 받게될 수 있습니다.
- Viewport 메타태그에 다음과 같은 변화가 있습니다.
- target-densitydpi 속성을 지원하지 않습니다.
- 뷰포트의 크기를 디바이스 화면 크기보다 작게 설정하면, 해당 값이 화면 크기로 재설정되는 대신 화면크기에 맞도록 뷰포트가 확대됩니다.
- 뷰포트 태그를 여러번 선언한 경우 가장 마지막에 사용된 태그만 적용됩니다.
- CSS 스타일 관련되어 다음과 같은 변화가 있습니다.
- 스타일 속성으로 background 을 지정하는 경우 background-size 속성 값이 오버라이드 됩니다. 따라서, 특정한 background-size 속성을 지정하기 위해서는 우선 background 속성 값을 지정한 다음에 background-size 속성을 설정해야 합니다.
- window.outerWidth 와 window.outerHeight 같은 속성들은 실제 스크린 픽셀 값 대신 CSS 픽셀 값을 반환합니다.
- NARROW_COLUMNS 와 SINGLE_COLUMN 값이 더이상 지원되지 않습니다. 이 값들은 targetSdkVersion을 18이나 그 이하로 설정할 경우에도 동작하지 않습니다.
- 자바스크립트로 웹뷰 상의 터치 이벤트를 직접 처리할 때는, touchcancel 이벤트를 처리해야 합니다. touchcancel 이벤트는 특정 HTML 요소가 선택된 후 페이지 스크롤이 일어나거나, event.preventDefault() 가 호출되지 않은 경우 발생합니다.
보다 자세한 내용은 안드로이드 개발자 사이트의
웹뷰 마이그레이션에 관한 가이드라인 문서를 참고해 보시기 바랍니다. 혹은, 전슬마로님이 한글로 정리해주신 내용도 참고해 보시면 좋을 것 같습니다. (감사의 댓글도 잊지 마세요~)
https://medium.com/marojuns-android/407facd301c7
새롭게 구현된 킷캣 버전의 새로운 웹뷰와 편리한 개발자 도구를 이용하여 여러분의 웹컨텐츠를 안드로이드 위에서 더욱 멋지게 활용하시길 바랍니다.