조건 


 Url에서 특정 패턴을 추출해서 시스템 브라우저를 호출한다. 



Webview에  WebViewClient 를 설정하고


webView.setWebViewClient(new TestWebViewClient());



해당 패턴이 포함되어 있을경우 시스템 브라우저를 호출한다.


private class TestWebViewClient extends WebViewClient {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

if(url.indexOf("___target=_blank") > -1){

Intent i = new Intent(Intent.ACTION_VIEW);

i.setData(Uri.parse(url));

context.startActivity(i);

return true;

}

return super.shouldOverrideUrlLoading(view, url);

}

}






Kitkat이전까지 이 방법으로 호출하였으나 문제는 킷캣 ( 4.4 kitkat ) 이상에서는 이 방법이 통하지 않습니다...


4.4부터 구글의 크롬엔진이 변경되어서 그렇다는 글을 검색을 통해서 확인하였고


여기저기 뒤져보다가 해결책을 발견...



webView에 웹 크롬 클라이언트를 설정..


webView.setWebChromeClient(new TestWebChromeClient());




새 창이 열리는 액션을 잡아서  해당 패턴일경우  새창에 띄워줍니다.


private class TestWebChromeClient extends WebChromeClient {

@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {

// Url 문자열을 가져옴.
WebView.HitTestResult result = view.getHitTestResult();
String url = result.getExtra();

if (url != null && url.indexOf("___target=_blank") > -1) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
context.startActivity(i);
return true;
}
return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
}


}



상기 두부분을 그대로 유지를 해둬야 4.4 이상에서도 동작하고 4.4 미만에서도 동작을 합니다.




+ Recent posts