Android调用H5的方法.Js交互
1.概述
在安卓开发中, 内嵌H5的页面的情况越来越多, 很多时候我们需要和H5进行相互调用, 比如H5调用安卓的方法 打开应用市场 等等 安卓调用H5的方法 获取网页传递的数据 等等 。交互其实是很简单的的一个问题,下面将简单的介绍Android和网页的相互调用和Js的交互
2.js互调
我现在有个需求就是获取H5的方法输出的数据 网页代码如下
如上所示, 我们需要获取到网页该方法给我提供的数据
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; } }