最近在做原生和js端的互调的功能,自己改了个demo,给大家讲解下。

先上js代码

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>方法调用基本流程测试</title>
</head>
<body>
<div id="helloweb">
<div id="echoInfo">如果有数据返回,会显示在这儿</div>
</div>
<script type="text/javascript"> function funFromjs(){
document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";
}
function echoInfo( container, obj ){
var domContainer = document.getElementById('echoInfo');
domContainer.innerHTML = JSON.stringify( obj );
} //function windowCallback( str ){
//echoInfo( 'echoInfo', str );
//} window.windowCallback = function( str ){
echoInfo( 'echoInfo', str );
}; var MfsJSBridge = MfsJSBridge || undefined;
if( undefined != MfsJSBridge ){ //看这里
var params = {
id : 1,
name : '测试'
}; var strParams = JSON.stringify( params ); MfsJSBridge.invoke( 'testFunc', strParams, 'windowCallback'); }else{
alert('未定义MfsJSBridge'); } </script> </body>
</html>

android webview 设置可用javascript

//设置编码
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
mWebView.getSettings().setJavaScriptEnabled(true);

android 调js

mBtn1.setOnClickListener(new View.OnClickListener() {

            @Override
public void onClick(View v) {
mWebView.loadUrl("javascript:funFromjs()");//其中funFromjs()为js的方法
Toast.makeText(mContext, "调用javascript:funFromjs()", Toast.LENGTH_LONG).show();
}
});

js调原生,原生响应时间并回调数据


mWebView.addJavascriptInterface(new Object(){
//注意4.4以后加注解,位置在这个方法名上面,鉴于很多这个的例子,瞎、、写注解位置,并需要下 //载积分写了这个
@JavascriptInterface
public void invoke(String name ,String t,String callback) {
if(name.equals("testFunc")){
//其中t 为js带过来的数据
Toast.makeText(mContext, t,Toast.LENGTH_LONG).show(); String strJson = "{\"code\":122, \"msg\":\"1231\", \"data\":null}"; //回调数据给js 其中callback 为android 掉js 的方法名称。
mWebView.loadUrl("javascript:"+ callback +"('" + strJson + "')");
}
// Toast.makeText(mContext, name, Toast.LENGTH_LONG).show(); }
},"MfsJSBridge");

代码比较简单,最主要的是 @JavascriptInterface注解的位置大家注意下。

源码下载

最新文章

  1. JS实战 &#183; &#160;收缩菜单表单布局
  2. WPF 显示文件列表中使用 ListBox 变到ListView 最后使用DataGrid
  3. (转)Mybatis高级映射、动态SQL及获得自增主键
  4. 用python+selenium从百度获取本地明日的天气信息并根据温度情况设置提醒
  5. rpm封装包,只用于记录自己过程,不适合初学者看,请看参考链接
  6. String、StringBuffer、StringBuilder的不同使用场景
  7. django-pagination的使用
  8. iOS开发--动画篇之layout动画深入
  9. as3.0 interface接口使用方法
  10. Visaul Studio2015安装以及c++单元测试使用方法
  11. Logistic Regression and Classification
  12. [C/C++]_[VS2010来源与UTF8中国字符串转码ANSI问题]
  13. Python[小甲鱼008了不起的分支和循环2]
  14. php显示距当前多长时间
  15. PHP两个日期之间的所有日期
  16. Spring中关于AOP的实践之Scheme方式实现通知
  17. MySQL视图 索引 存储过程 触发器 函数
  18. jmeter---将回应数据写入到文件
  19. Android系统版本与API等级对应关系表
  20. 解析Delphi 窗口置顶,及非主窗口置顶

热门文章

  1. 研究SSIS时候的一些常见错误
  2. C# HashTable 使用用法详解
  3. 第一个servet(用注解),不用web.xml
  4. oracle学习篇十一:视图
  5. Angular6 基础(数据绑定、生命周期、父子组件通讯、响应式编程)
  6. js原生拖拽
  7. 私网IP访问Internet
  8. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 5、安装Datastore
  9. 如何设置树莓派的VNC开机时启动
  10. redis的使用方式