当时业务的需求是这样的,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 + "')");
}
}
}

最新文章

  1. NameError: name &#39;sys_platform&#39; is not defined
  2. (转)struts2:数据校验,通过XWork校验框架实现(validation.xml)
  3. hdoj 2066 一个人的旅行
  4. Cordova for iOS[ PhoneGap]
  5. C 语言学习的第 03 课:你的 idea 是怎么变成能够执行的程序的
  6. leetcode:32 最长有效括号
  7. [R语言]foreach和doParallel包实现多个数据库同时查询
  8. 有没有好用的开源sql语法分析器? - 匿名用户的回答 - 知乎
  9. UIKit: UIResponder(转自南峰子博客)
  10. 浙大pat 1048 题解
  11. Apache Spark 章节1
  12. js各种获取当前窗口页面宽度、高度的方法
  13. 使用getCurrentPosition方法实时获取当前Geolocation信息(附源码文件)--html5、JavaScript
  14. .net中的SelectList在Html.DropdownList中的使用
  15. Process Class (System.Diagnostics)
  16. [Arc058E] Iroha and Haiku
  17. Bootstrap学习js插件篇之标签页
  18. 【模拟】 Codeforces Round #434 (Div. 1, based on Technocup 2018 Elimination Round 1) C. Tests Renumeration
  19. redis实现发布订阅
  20. 无类型指针 在delphi中可以直接赋值任何指针类型。

热门文章

  1. MySQL之 从复制延迟问题排查
  2. dnstop DNS分析工具
  3. JS 从HTML页面获取自定义属性值
  4. MySQL体系架构
  5. 基于redis 3.x搭建集群环境
  6. Vivado HLS初识---阅读《vivado design suite tutorial-high-level synthesis》(4)
  7. MySQL 快速构造一亿条记录的表
  8. 【react】---Immutable的基本使用
  9. python selenium right click on an href and choose Save link as... on Chrome.
  10. 如何修改CSV文件的分隔符