Android调用H5的方法.Js交互

1.概述

       在安卓开发中, 内嵌H5的页面的情况越来越多, 很多时候我们需要和H5进行相互调用, 比如H5调用安卓的方法 打开应用市场  等等 安卓调用H5的方法  获取网页传递的数据 等等 。交互其实是很简单的的一个问题,下面将简单的介绍Android和网页的相互调用和Js的交互

2.js互调

我现在有个需求就是获取H5的方法输出的数据  网页代码如下

Android调用H5的方法.Js交互_第1张图片


如上所示, 我们需要获取到网页该方法给我提供的数据

Android端代码如下
private void initView() {
    webView = (WebView) findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setDomStorageEnabled(true);
    //设置WebView属性,能够执行Javascript脚本
    webSettings.setJavaScriptEnabled(true);
    //设置可以访问文件
    webSettings.setAllowFileAccess(true);
    //设置Web视图
    webView.setWebViewClient(new webViewClient());
    // 支持js调用java   jsInAndroid相当于和H5端定义的协议
    webView.addJavascriptInterface(new JSInterface(), "jsInAndroid");

    // 调用H5页面的方法  无参方法 getInfo方法名
    webView.loadUrl("javascript:getInfo()");
    //有参方法
    // webView.loadUrl("javascript:getInfo("+"'参数'"+")");
    findViewById(R.id.conversation_back).setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if (webView.canGoBack()) {
                webView.goBack();//返回上一页面 
            } else {
                finish();
            }
        }
    });
}
 
   
class JSInterface {
    // info即H5的方法  name即H5返回的数据
    @JavascriptInterface
    public String info(String name) {
        try {
            JSONObject object = new JSONObject(name);
            sharetitle = object.optString("title");
            shareaddress = object.optString("shareurl");
            sharepic = object.optString("pic");
            sharecontent = object.optString("content");
        } catch (JSONException e) {
            e.printStackTrace();
        } 
        return name;
    }
}
 
  
private class webViewClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        String title = view.getTitle();
        // 加载网页标题
        if (!TextUtils.isEmpty(title)) {
            ((TextView) findViewById(R.id.conversation_title)).setText(title);
        }
    }
    // 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("launchagency")) {
            checkApkExist();
        } else {
            view.loadUrl(url);
        }
        return true;
    }
}


你可能感兴趣的:(android)