또, 내 경우는 웹뷰내에 Adsense 구글광고가 들어 있는데 이용자가 이 것을 클릭했을때에 처리가 되지 않는 문제가 있어서 별도 브라우저를 구동시키는 방법이 필요했다.
mWebView.setWebViewClient (
new WebViewClient () {
@Override
public boolean shouldOverrideUrlLoading (WebView view, String url)
{
view.loadUrl(url);
return true;
}
}
);
shoulOverrideUrlLoading 에서 url 이 내 페이지가 아닌 경우 브라우저를 실행시키면 될거 같았는데, 안타깝게도 이 아이디어는 동작하지 않는다.
stackoverflow.com 에서 찾아낸 아이디어는, ChromeClinet를 이용해서 새로운 WebView를 만든다음에, 그 안쪽의 shoulOverrideUrlLoading 에서 브라우저를 구동시키는 것이다. 이게 무슨 복잡한 방법이냐 싶은데... 잘 돌아가니 OK!
WebSettings webSetting = mWebView.getSettings();
webSetting.setJavaScriptEnabled(true);
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
webSetting.setSupportMultipleWindows(true);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
{
// return true or false after performing the URL request
WebView newWebView = new WebView(MyActivity.this);
view.addView(newWebView);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
newWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setData(Uri.parse(url));
startActivity(browserIntent);
return true;
}
});
return true;
}
});
mWebView.loadUrl ("...");
댓글 없음:
댓글 쓰기