2013년 2월 20일 수요일

WebView 만들기

1. 먼저 Internet 사용 권한이 있어야 한다.
<uses-permission android:name="android.permission.INTERNET" />

2. 간단한 WebView
예) 단순히 Google 페이지를 열어 준다.
WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.google.com");
setContentView(webView);


3. javascript 활성화
webView.getSettings().setJavaScriptEnabled(true);

4. back 키를 누르면 뒤로 가고 history 가 없으면 기본 back 키 동작
예)
@Override
public void onBackPressed() {
    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }
}


5. asset 에 있는 web page 열기
loadUrl() 함수에 주소 지정시 아래와 같이 함
webView.loadUrl("file:///android_asset/html/index.html");
실제 위치는 assets/html/index.html

6. javasript alert 창 보이기
예) 간단하게 WebChromeCilent 객체를 지정해 주면 된다.
webView.setWebChromeClient(new WebChromeClient());

7. 위 사항들 종합
예) 자바 코드
webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());

webView.loadUrl("file:///android_asset/html/index.html");
setContentView(webView);


예) HTML 코드 : assets/html/index.html
<html>
<head>
<title>WebView Test</title>
</head>
<body>
<h1>WebView Test</h1>
<a href="javascript:alert('Test');">Alert Test</a><br />
Javascript is <span id="text">disabled</span>
<script type="text/javascript">
var text = document.getElementById("text");
text.innerHTML = "enabled";
</script>
</body>
</html>


8. Javascript Interface 사용
 - Javascript Interace 를 이용하면 웹 페이지에서 javascript 를 이용해서 java 코드를 호출 할 수 있다.
 - 참고 : http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29
 - 함수는 반드시 public 으로 지정해야 하고 안드로이드 4.2 (JellyBean MR1) 부터는 @JavascriptInterface 을 지정해 줘야 함
예) 자바 코드
webView.addJavascriptInterface(new Object() {
    @JavascriptInterface
    public String toString() {
        return "AppInterface";
    }
    @JavascriptInterface
    public void toast(String text) {
        Toast.makeText(WebViewActivity.this, text, Toast.LENGTH_LONG).show();
    }
}, "AppInterface");


예) HTML 코드
<a href="javascript:AppInterface.toast('Hello');">Javascript Interface Test : Toast</a><br />

9. 하이퍼 링크 URL 을 확인하여 기본 브라우저로 띄우기
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
           
        if (Uri.parse(url).getHost().indexOf("google") >= 0) {
            // host 명에 google 이 포함되면 webview 로 보여줌
            return false;
        }
        

        // 아니면 기본 브라우저를 띄움
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(intent);
   
        return true;
    }
});


댓글 없음:

댓글 쓰기