Android原生和H5交互;Android和H5混合開發;WebView點擊H5界面跳轉到Android原生界面。


當時業務的需求是這樣的,H5有一個活動商品列表的界面,IOS和Android共用這一個界面,點擊商品可以跳轉到Android原生的商品詳情界面並傳遞商品ID;  大概就是點擊H5界面跳轉到Android原生界面

好了,需求已經分析完畢了,Android只需要獲取H5的點擊事件和傳遞的參數;

來,上代碼:

/啟用支持javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);

Android4.2以上需要@JavascriptInterface注解,其目的是為了安全;

public class JavaScriptObject{
    public JavaScriptObject(Activity activity) {

    }
    @JavascriptInterface
    public void setToken(String token){
        //token就是商品的ID,這里拿到商品的ID后直接跳轉到商品詳情頁,並把id傳遞過去
    }
    @JavascriptInterface
    public void definedShare(String ShareJson){
    }
}

/*
*添加js接口,參數1是本地類名,參數2是標記;H5調用需要 "window.標記.類名中的方法名" 才能調用
*/
webView.addJavascriptInterface(new JavaScriptObject(this), "android");

到這里Android端需要寫的就完成了;

這個是我截的圖,可以看一下:


這里是H5需要寫的代碼:

<script type="text/javascript">
        function s(){
        //調用Android的setToken()方法
        var result =window.android.setToken(goodsId);
        document.getElementById("p").innerHTML=result;
        }
</script>


----------------------------------------------------------------------------------------------------------------------------------

附:如果在Android端調用H5中的方法:

 /*
  * Android調用H5中的方法 
 */
//傳固定字符串可以直接用單引號括起來
 mWebView.loadUrl("javascript:alertMessage('哈哈')");//訪問H5里帶參數的方法,alertMessage(message)為H5里的方法

 //當出入變量名時,需要用轉義符隔開
 String content="1016";
 mWebView.loadUrl("javascript:alertMessage(\""   +content+   "\")"   );
 
 //Android調用有返回值js方法,安卓4.4以上才能用這個方法
 mWebView.evaluateJavascript("11", new ValueCallback<String>() {
     @Override
     public void onReceiveValue(String value) {
         Log.i(TAG, "js返回的結果為=" + value);
     }
 });

抽成方法:

 private void callJS(String callback, String status) {
        if (TextUtils.isEmpty(status)) {
            if (AndroidUtils.isKitkat()) {
                mWebView.evaluateJavascript("javascript:" + callback + "()", null);
            } else {
                mWebView.loadUrl("javascript:" + callback + "()");
            }
        } else {
            if (AndroidUtils.isKitkat()) {
                mWebView.evaluateJavascript("javascript:" + callback + "('" + status + "')", null);
            } else {
                mWebView.loadUrl("javascript:" + callback + "('" + status + "')");
            }
        }
    }


免責聲明!

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



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