android webView使用


在Android手機中內置了一款高性能webkit內核瀏覽器,在SDK中封裝為一個叫做WebView組件。 

一、使用WebView

1.加入權限

    <uses-permission android:name="android.permission.INTERNET" />

2.創建一個webView

通過布局

  <WebView
            android:id="@+id/webkit"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
xml創建webview

或則直接在代碼中創建

WebView webView=new WebView(this);

3.通過WebViewClient加載

mWebView.setWebViewClient(new WebViewClient(){       
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                        view.loadUrl(url);       
                        return true;       
                    }       
        });   

4.輔助類WebSettings

通過browser.getSettings()獲取WebSettings

a)可以集成對JS的腳本支持

 browser.getSettings().setJavaScriptEnabled(true);

b)對網頁的縮放

browser.getSettings().setSupportZoom(true);//網頁縮放

對於android4.0版本(4.1是否存在,有待研究)上述方式是不能夠實現的

需要繼續加入代碼

browser.getSettings().setBuiltInZoomControls(true);
                browser.getSettings().setDefaultZoom(ZoomDensity.CLOSE);//默認縮放模式
                browser.setInitialScale(100);

5.加載本地資源assert目錄下文件

browser.loadUrl("file:///android_asset/testChart.html");

6.對於返回的控制

重寫WebViewClient的onKeyDown方法

public boolean onKeyDown(int keyCode, KeyEvent event) {       
           if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {       
                browser.goBack();       
                       return true;       
            }    
            return super.onKeyDown(keyCode, event);       
        }   

 7.加入對JS的調用

<script language="javascript">
        /* This function is invoked by the activity */
        function wave() {
            alert("1");
           // document.getElementById("droid").src="android_waving.png";
            alert("2");
        }
    </script>
    <body>
        <!-- Calls into the javascript interface for the activity -->
        <a onClick="window.demo.clickOnAndroid()"><div style="width:80px;
            margin:0px auto;
            padding:10px;
            text-align:center;
            border:2px solid #202020;" >
                Click me!
        </div></a>
    </body>
   mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

  final class DemoJavaScriptInterface {

            DemoJavaScriptInterface() {
            }

            /**
             * This is not called on the UI thread. Post a runnable to invoke
             * loadUrl on the UI thread.
             */
            public void clickOnAndroid() {
                mHandler.post(new Runnable() {
                    public void run() {
                        mWebView.loadUrl("javascript:wave()");
                    }
                });

            }
        }

ps:貌似android2.3版本會有VM aborting的問題。

如果需要調用alert的話,需要重寫WebChromeClient

mWebView.setWebChromeClient(new MyWebChromeClient());

 final class MyWebChromeClient extends WebChromeClient {
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
               /* Log.d(LOG_TAG, message);
                result.confirm();
                return true;*/
                return super.onJsAlert(view, url, message, result);
            }
        }

當然我們也可以捕獲alert的內容,然后進行重寫

mWebView.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    AlertDialog.Builder b2 = new AlertDialog.Builder(MainActivity.this)
                            .setTitle("alert title").setMessage(message)
                            .setPositiveButton("ok",
                                    new AlertDialog.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog,
                                                int which) {
                                            result.confirm();
                                            // MyWebView.this.finish();
                                        }
                                    });

                    b2.setCancelable(false);
                    b2.create();
                    b2.show();
                    return true;
                }
            });

感謝vanekey兄的大力支持

更多移步這里:

https://code.google.com/p/android/issues/detail?id=12987

http://stackoverflow.com/questions/10104265/android-webview-javascript-doesnt-fire-the-call-back-function

http://www.linuxidc.com/Linux/2011-05/35782.htm

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM