Search

'WebView'에 해당되는 글 2건

  1. 2010.08.31 [Hello,Android] Android <-> WebView 간 호출하기 1
  2. 2010.08.16 [Hello,Android] WebView 사용 시 1
Android쪽
public class LocalBrowser extends Activity {

    private static final String TAG = "LocalBrowser";
    private final Handler handler = new Handler();
    private WebView webView;
    private TextView textView;
    private Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 화면에서 안드로이드 컨트롤 찾기
        webView = (WebView) findViewById(R.id.web_view);
        textView = (TextView) findViewById(R.id.text_view);
        button = (Button) findViewById(R.id.button);

        // 임베딩된 브라우저-WebView-에 자바스크립트 활성화하기
        webView.getSettings().setJavaScriptEnabled(true);

        // 자바 객체-AndroidBridge-를 브라우저의 자바 스크립트에 노출시키기
        // 객체, 노출할 DOM명칭
        webView.addJavascriptInterface(new AndroidBridge(), "android");

        // 임의의 WebChromeClient 객체를 생성하여 WebView에 등록.
        // 여기의 Chrome은 브라우저 창 주의를 정리하는 모든 작업을 일컬음. 즉, 브라우저 처리을 할 클라이언트를 등록
        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//                return super.onJsAlert(view, url, message, result);
                Log.d(TAG, "onJsAlert(" + view + ", " + url + ", " + message + ", " + result + ")");

                Toast.makeText(LocalBrowser.this, message, 3000).show();

                result.confirm(); // 결과 처리됨
                return true; // 여기서 처리했으므로 true 반환
            }
        });

        // 로컬 assets에서 웹 페이지 로딩하기
        webView.loadUrl("file:///android_asset/index.html");

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick(" + v + ")");

                // 자바스크립트 호출
                webView.loadUrl("javascript:callJS('Hello from Android')");
            }
        });
    }


    /**
     * 자바 스크립트에 노출된 객체
     *
     */
    private class AndroidBridge {
        public void callAndroid(final String arg) { // 반드시 final이어야 함

            handler.post(new Runnable() {

                @Override
                public void run() {
                    Log.d(TAG, "callAndroid(" + arg + ")");

                    textView.setText(arg);
                }
            });
        }
    }
}

WebView쪽
<html>
<head>
<script type="text/javascript">
    function callJS(arg) {
        document.getElementById("replaceme").innerHTML = arg;
    }
</script>
</head>
<body>
<h1>WebView</h1>
<p>
    <a href="#" onclick="window.alert('Alert from JavaScript');">Display JavaScript alert</a>
</p>
<p>
    <a href="#" onclick="window.andriod.callAndroid('Hello from Browser');"></a>
</p>
<p id="replaceme"></p>
</body>
</html>

addJavascriptInterface() 에서 설정한 DOM명칭 "android"로 WebView에서 호출가능하다.

- final 매개변수를 잘 사용하자. -> 메소드 내에서 변경하면 안되는 값(주소값)일 경우에 사용하면 유용할 듯

[Hello,Android] WebView 사용 시

프로그래밍/Android 2010. 8. 16. 15:41 Posted by galad
[7.2 뷰가 있는 웹]에서 WebView에 setWebViewClient() 를 실행하지 않으면 WebView에서 웹페이지가 열리지 않고,
그냥 브라우저가 실행된다.(Intent로 여는 것처럼)

안드로이드OS가 버젼업되면서 바뀐 것 같지는 않고, 저자의 미스인 듯?

소스는 다음과 같다.
    private void openBrowser() {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(urlText.getText().toString());
        webView.setWebViewClient(new HelloWebViewClient());  // WebViewClient 지정
    }
   
   
    private class HelloWebViewClient extends WebViewClient {
       
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }



'프로그래밍 > Android' 카테고리의 다른 글

[Hello,Android] dip, sp  (0) 2010.08.17
[Hello,Android] 익명의 내부 클래스  (0) 2010.08.17
[Hello,Android] 기본팁  (0) 2010.06.08
[Hello,Android] Activity Lifecycle  (0) 2010.06.07
[설치] Hello, World!  (0) 2010.05.11