Android與HTML-JS交互入門

現在的APP裏面會嵌套一些h5酷炫的界面,而我們的app就需要和H5進行交互,下面我們就來看看怎麼進行具體的交互。

Webview的基本設置

以下是webview的基本設置

WebSettings setting = mWebView.getSettings();
setting.setJavaScriptCanOpenWindowsAutomatically(true);//設置js可以直接打開窗口,如window.open(),默認爲false
        setting.setJavaScriptEnabled(true);//是否允許執行js,默認爲false。設置true時,會提醒可能造成XSS漏洞
        setting.setSupportZoom(true);//是否可以縮放,默認true
        setting.setBuiltInZoomControls(false);//是否顯示縮放按鈕,默認false
        setting.setUseWideViewPort(true);//設置此屬性,可任意比例縮放。大視圖模式
        setting.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解決網頁自適應問題
        setting.setAppCacheEnabled(true);//是否使用緩存
        setting.setDomStorageEnabled(true);//DOM Storage
        setting.setDatabaseEnabled(true);
        setting.setAllowFileAccess(true);
        setting.setAppCacheEnabled(true);
        setting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //圖片太大
        setting.setDatabasePath(getActivity().getApplicationContext().getCacheDir().getAbsolutePath());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }

開啓log日誌

開啓打印web的日誌設置,可以看到log信息:

webview.setWebChromeClient(new WebChromeClient() {
            public boolean onConsoleMessage(ConsoleMessage cm) {
                LogUtils.e(TAG, "打印web日誌------"+cm.message() + " -- From line "
                        + cm.lineNumber() + " of "
                        + cm.sourceId());
                return true;
            }
        });

添加JavascriptInterface;

mWebView.addJavascriptInterface(new AndroidJavaScript(), "test");

AndroidJavaScript

public class AndroidJavaScript {
        @JavascriptInterface
        public void testPage() {
            LogUtils.e("test", "testPage");
        }
    }

testPage是和H5約定的名稱,以上就是簡易的Android和js的交互,具體的細節還需要和H5討論。

HTML簡易代碼

裏面主要有兩個按鈕,兩個JS方法

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<script type="text/javascript">

function AndroidCallJs(){
     document.getElementById("content").innerHTML =
         "<br\>Android調用了JS的無參函數";
}

function AndroidCallJsParam(arg){
     document.getElementById("content").innerHTML =
         ("<br\>"+arg);
}
</script>
</head>
<body>
HTML Test <br/>
<h1><div id="content">Test </div></h1>
<br/>
<input type="button"  value="點擊調用Android代碼" onclick="window.android.startFunction()" />
<br/>
<input type="button"  value="點擊調用Android代碼並傳遞參數" onclick="window.android.startFunction('https://blog.csdn.net/sinat_26397681?spm=1000.2115.3001.5343')"  />
</body>
</html>

Android 的調用方式

// 無參數調用 JS的方法  
webview.loadUrl("javascript:AndroidCallJs()");
//有參調用HTML js方法
webview.loadUrl("javascript:AndroidCallJsParam(" + "'https://blog.csdn.net/sinat_26397681?spm=1000.2115.3001.5343'" + ")");

王子豬 祝您天天開心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章