Android Webview 和Javascript交互,实现Android和JavaScript相互调用

在Android的开发过程中、遇到一个新需求、那就是让Java代码和Javascript代码进行交互、在IOS中实现起来很麻烦、而在Android中相对来说容易多了、Android对这种交互进行了很好的封装、我们可以很简单的用Java代码调用WebView中的js函数、也可以用WebView中的js来调用Android应用中的Java代码。

案例主要包含了:

  1. Html中调用Android方法
  2. Android调用JS方法无参数
  3. Android调用JS方法有参数
  4. Android调用JS方法有参数且有返回值处理方式1
  5. Android调用JS方法有参数且有返回值处理方式2(Android4.4以上)

1:创建JS对象

webView.addJavascriptInterface(new JsInterface(), "obj");
public class JsInterface {
    //JS中调用Android中的方法 和返回值处理的一种方法

    /****
          * Html中的点击事件 onclick
      *  <input type="button" value="结算" onclick="showToast(‘12‘)">
      * @param toast
      */
    @JavascriptInterface
    public void showToast(String toast) {
      Toast.makeText(MainActivity.this, "你的商品价格是:¥"+toast, Toast.LENGTH_SHORT).show();
    }
}
function showToast(toast) {
    var money=toast*3;
    javascript:obj.showToast(money);
}

2:

webView.loadUrl("javascript:funFromjs()");
function funFromjs(){
    document.getElementById("helloweb").innerHTML="div显示数据,无参数";
}

3:

webView.loadUrl("javascript:funJs(‘Android端传入的信息,div标签中显示,含参数‘)");
function funJs(msg){
   document.getElementById("hello2").innerHTML=msg;
}

4:

webView.loadUrl("javascript:sum(6,6)");
/***
 * Android代码调用获取J是中的返回值
 *
 * @param result
*/
   @JavascriptInterface
   public void onSum(int result) {
    Toast.makeText(MainActivity.this, "Android调用JS方法且有返回值+计算结果=="+result, Toast.LENGTH_SHORT).show();
   } 
function sum(i,m){
    var result = i*m;
    document.getElementById("h").innerHTML= "Android调用JS方法且有返回值--计算结果="+result;
    javascript:obj.onSum(result)
} 

5:

 webView.evaluateJavascript("sumn(6,11)", new ValueCallback<String>() {
         @Override
     public void onReceiveValue(String value) {
         Toast.makeText(MainActivity.this, "返回值"+value, Toast.LENGTH_SHORT).show();
           }
});
function sumn(i,m){
     var result = i*m;
     document.getElementById("hh").innerHTML= "Android调用JS方法且有返回值--计算结果="+result;
     return result;
} 

注意:

1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法

2、Java 调用 js 的函数、没有返回值、调用了就控制不到了

3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间

4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。

注:使用的是本地的Html文件,不过在网络链接的Html文件也是可以实现的。

源码点击下载

时间: 2024-12-16 08:52:43

Android Webview 和Javascript交互,实现Android和JavaScript相互调用的相关文章

android webview与js交互(动态添加js)

1.本地html与本地html里的js交互 2.本地html与本地js交互 3.网络html与网络js交互 4.网络html与本地js交互 5.各个情况动态添加js 以上5点都可以用一种方式来模拟,在本篇中采用本地html与本地js交互 (包含动态添加js的操作) 6.拦截url请求(在webview加载完成以后,触发的请求url) 7.拦截url请求后返回自己封装的数据(基于第6点,加载完成后,触发一些请求数据的url时拦截并自己封装数据返回给webview) 注:6.7点将在下一篇博客介绍

Android Webview与Html5交互

转:http://fangjie.info/?p=417#more-417   一.WebView.setWebViewClient(new MyWebViewClient()); 1.public boolean shouldOverrideUrlLoading(WebView view, String url) { onWebPageShouldLoad(view, url); //通过 return true; } 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接

Android webview与js交互

记录别人的几篇地址: http://www.cnblogs.com/vanezkw/archive/2012/07/02/2572799.html http://www.cnblogs.com/mengdd/archive/2013/03/02/2940185.html http://blog.csdn.net/cappuccinolau/article/details/8262821

[Chromium] Chromium Android WebView层的设计

Chromium Android WebView是Chromium专为Android WebView提供一个对Content的封装层.从整体上来看可以理解为一个特殊化的Embedder, 功能可以概括为: 1. 对Content和部分Browser Components封装到Java实现,供AOSP WebView调用实现WebView功能. 2. 实现Android WebView使用的单进程渲染架构. 3. 配置网络模块,并实现特定需要的scheme解析. Content作为一个能力提供者,

手把手教你构建 Android WebView 的缓存机制 &amp; 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.

(一) Android WebView是什么?

1.Android WebView 一些基本概念 在 Android 手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装为一个叫做 WebView 组件. 什么是 webkit WebKit 是 Mac OS X v10.3 及以上版本所包含的软件框架(对 v10.2.7 及以上版本也可通过软件更新获取). 同 时,WebKit 也是 Mac OS X 的 Safari 网页浏览器的基础.WebKit 是一个开源项目,主要由 KDE 的 KHTML 修改而来并 且包含了一些来自

Android WebView与JavaScript交互操作(Demo)

应用场景: 为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式.相关Hybrid APP(混合型应用)参看:http://blog.csdn.net/mahoking/article/details/30235243 采用这种模式,为了解决更好的用户体验,可访问本地资源的能力.势必需要了解与掌握Android(java)与JavaScript之间的交互.相互调用操作的方法与技术. [转载使用,请注明出处:http://

Android WebView与JavaScript交互实现Web App

当我们去开发一个基于web的android app时,我们第一须要处理的就是与JavaScript的交互问题.Android须要做的事情就是开放某些特定的接口供web里的JavaScript调用,能够开放弹出框功能,Toast,界面跳转等等.这样我们的web视图以假乱真的当成Android的原生界面.而这套web代码又能够嵌入iPhone的client中.也就是说Android和IOSclient不过提供一个共web使用的框架,业务都由web端处理.这岂不是开发一次.可处处执行.然而这一切都是后

WebView与JavaScript交互--Android

转载请注明出处:  http://blog.csdn.net/forwardyzk/article/details/46819925 在工作中,有一个这种需求,须要用到WebView与javascript进行交互,以下我们就通过一个简单的需求来介绍. 先看一下效果图: 需求: 1.点击一个button进入一个载入WebView的界面,假设此界面须要分享此界面到其它平台,那么就在当前界面展示"分享"button,假设不须要分享,那么就不展示"分享"button. 2.

Android WebView JavaScript交互

今天介绍一下,Android中Webview与JavaScript的交互,首先是在布局文件里添加webview控件: [html] view plaincopy <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 然后是在manifest里添加权限: [html] vie