20131119

Android 4.4 KitKat WebView 이슈 정리

KitKat 뜨고 테스트 단말 Nexus 5 샀는데 앱 WebView가 다 깨짐. 원인은 알다시피 Chromium 기반으로 바뀐거.

걸린 지점들 메모.

1. User-Agent 바뀜
// 4.3
Mozilla/5.0 (Linux; U; Android 4.3; ...) AppleWebKit/534.30 ...
// 4.4
Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/KRT16M) AppleWebKit/537.36 ... Chrome/30.0.0.0
서버에서 UA로 OS 분기하던 레거시 코드 몇 개가 오작동. "AppleWebKit/534"를 정규식으로 잡던 부분 다시 뜯어야 했다.

2. loadUrl("javascript:...") 가 void
그전엔 native에서 js 인보크하고 return value 못 받는걸 당연히 알고 있었는데, 4.4부터는 evaluateJavascript() 라는 새 API가 생겼음. callback으로 결과 받을 수 있음. 근데 4.4 미만에서는 안되니까 SDK 버전 분기 필요.

if (Build.VERSION.SDK_INT >= 19) {
    webView.evaluateJavascript("getToken()", new ValueCallback<String>() {
        public void onReceiveValue(String value) { ... }
    });
} else {
    webView.loadUrl("javascript:getToken()");
}

3. file:// 에서 XHR 막힘
로컬 html에서 json 불러오던게 CORS로 막힘. setAllowFileAccessFromFileURLs(true) 호출해야 되는데 보안상 찝찝함. 결국 assets 대신 서버에서 받아오는 쪽으로 바꿈.

기타 CSS viewport 계산이 살짝 달라져서 레이아웃 몇개 깨짐. 이건 일일이 잡는 수밖에...