最近在做原生和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注解的位置大家注意下。

源码下载

Javascript和android原生互调的更多相关文章

  1. JavaScript调用App原生代码(iOS、Android)通用解决方案

    实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...

  2. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  3. Android-----js和android的互调

    Android-----js和android的互调   http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/We ...

  4. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  5. Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。

    当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID:  大概就是点击H5界面跳转到Androi ...

  6. 将React Native集成至Android原生应用

    将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...

  7. uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

    前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...

  8. 拓展 Android 原生 CountDownTimer 倒计时

    拓展 Android 原生 CountDownTimer 倒计时 [TOC] CountDownTimer 在系统的CountDownTimer上进行的修改,主要是拓展了功能,当然也保留了系统默认的模 ...

  9. Android原生json和fastjson的简单使用

    android原生操作json数据 主要是两个类 JSONObject 操作对象     JONSArray操作json数组 对象转json //创建学生对象 Student student=new ...

随机推荐

  1. ionic2 目录

    首先 ionic2 暂时找不到中文文档.本人英语又很渣.无奈之下只能依赖于百度翻译.完全是已自己理解的方式运作 ,可能里面会有一些偏差之类的 不过我都测试过代码是可以跑通的 只不过讲解的部分可能... ...

  2. Node.js之Buffer

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存 ...

  3. Java ConcurrentHashMap初始化

    初始化ConcurrentHashMap时可以指定map大小,由于ConcurrentHashMap代码默认大小是2n,这里需要把用户填的大小转换成2n备注:代码基于jdk 1.8.0_91Concu ...

  4. java中try-catch-finally中的return语句

    在try-catch-finally语句中使用return语句遇到了一些疑问 代码一: static int intc(){ int x =0; try{ x=1; return x; }finall ...

  5. Bash 脚本语法

    每次学了忘,忘了学,怎么记不住,因为长时间不用了 Bash 流程控制 循环 for循环 for item in $list do echo $item done 另一种与C语言类似的写法 ; i< ...

  6. jquery toggle(listenerOdd, listenerEven)

    1. example: <!DOCTYPE HTML><html>    <head></head>    <body>        &l ...

  7. 【数据库】4.0 MySQL入门学习(四)——linux系统环境下MySQL安装

    1.0 我的操作系统是CentOS Linux release 7.6.1810  (Core) 系统详细信息如下: Linux version 3.10.0-957.1.3.el7.x86_64 ( ...

  8. js数组的sort排序的原理和应用

    1.js sort()方法的应用: 首先:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串( ...

  9. Stage2--Python的数据类型

    说在前面: Stage1-Stage4简单介绍一下Python语法,Stage5开始用python实现一些实际应用,语法的东西到处可以查看到,学习一门程序语言的最终目的是应用,而不是学习语法,语法本事 ...

  10. Java设计模式—适配器模式

    适配器模式的个人理解: 首先有一个目标角色.一个源角色还有一个适配器角色.我们要做的就是利用适配器角色将源角色转换为目标角色.而目标角色是一个正在良好运行的一个角色. 转换方法: (1)  适配器类继 ...