Android开发,WebView下Java和JavaScript互相调用(2)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转载的,文章来源

还有一篇别人写的,感觉还可以,这里没有列出。
更多关于Java和JavaSc的调用

如何实现
实现Java和js交互十分便捷。通常只需要以下几步。

WebView开启JavaScript脚本执行
WebView设置供JavaScript调用的交互接口。
客户端和网页端编写调用对方的代码。
本例代码
为了便于讲解,先贴出全部代码

Java代码

package com.example.javajsinteractiondemo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends Activity {
  private static final String LOGTAG = "MainActivity";
  @SuppressLint("JavascriptInterface")
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      final WebView myWebView = (WebView) findViewById(R.id.myWebView);
      WebSettings settings = myWebView.getSettings();
      settings.setJavaScriptEnabled(true);
      myWebView.addJavascriptInterface(new JsInteration(), "control");
      myWebView.setWebChromeClient(new WebChromeClient() {});
      myWebView.setWebViewClient(new WebViewClient() {

          @Override
          public void onPageFinished(WebView view, String url) {
              super.onPageFinished(view, url);
              testMethod(myWebView);
          }

      });
      myWebView.loadUrl("file:///android_asset/js_java_interaction.html");
  }

  private void testMethod(WebView webView) {
      String call = "javascript:sayHello()";

      call = "javascript:alertMessage("" + "content" + "")";

      call = "javascript:toastMessage("" + "content" + "")";

      call = "javascript:sumToJava(1,2)";
      webView.loadUrl(call);

  }

  public class JsInteration {

      @JavascriptInterface
      public void toastMessage(String message) {
          Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
      }

      @JavascriptInterface
      public void onSumResult(int result) {
          Log.i(LOGTAG, "onSumResult result=" + result);
      }
  }

}

前端网页代码

<html>
<script type="text/javascript">
    function sayHello() {
        alert("Hello")
    }

    function alertMessage(message) {
        alert(message)
    }

    function toastMessage(message) {
        window.control.toastMessage(message)
    }

    function sumToJava(number1, number2){
       window.control.onSumResult(number1 + number2)
    }
</script>
Java-Javascript Interaction In Android
</html>

调用示例
js调用Java
调用格式为window.jsInterfaceName.methodName(parameterValues) 此例中我们使用的是control作为注入接口名称。

function toastMessage(message) {
window.control.toastMessage(message)
}

function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
}
Java调用JS
webView调用js的基本格式为webView.loadUrl(“javascript:methodName(parameterValues)”)

调用js无参无返回值函数
String call = “javascript:sayHello()”;
webView.loadUrl(call);
调用js有参无返回值函数
注意对于字符串作为参数值需要进行转义双引号。

String call = “javascript:alertMessage(“” + “content” + “”)”;
webView.loadUrl(call);
调用js有参数有返回值的函数
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。

1.Java调用js代码

String call = “javascript:sumToJava(1,2)”;
webView.loadUrl(call);
2.js函数处理,并将结果通过调用java方法返回

function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
}
3.Java在回调方法中获取js函数返回值

@JavascriptInterface
public void onSumResult(int result) {
Log.i(LOGTAG, “onSumResult result=” + result);
}
处理
Android 4.4之后使用evaluateJavascript即可。这里展示一个简单的交互示例 具有返回值的js方法

function getGreetings() {
return 1;
}
java代码时用evaluateJavascript方法调用

private void testEvaluateJavascript(WebView webView) {
webView.evaluateJavascript(“getGreetings()”, new ValueCallback() {

@Override
public void onReceiveValue(String value) {
Log.i(LOGTAG, “onReceiveValue value=” + value);
}});
}
输出结果

I/MainActivity( 1432): onReceiveValue value=1
注意

上面限定了结果返回结果为String,对于简单的类型会尝试转换成字符串返回,对于复杂的数据类型,建议以字符串形式的json返回。
evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。

APP开发_Android 与 js 互相调用 Android 与 js 互相调用 阅读详情

相关推荐

AndroidWebview使用Java代码JS相互调用

本文主要记录一些零碎的东西 最近由于项目的需要,需要使用Java代码JS相互调用,特此记录一点入门的东西,仅仅是入门而已 github: https://github.com/CL-window/java_webview_js.git 话不多说,肯定是分为两块的 1.java 调用 js: /** * method here will not load htm

I_do_can的博客 3218

androidWebviewjavascript的交互(互相调用

最近做android项目中遇到要在webview中做与js交互相关的东东,涉及到js中调用android本地的方法,于是查了资料整理了一下androidjs互相调用的过程。如下demo,demo的主要实现过程如下:通过加载本地的html文件(里面有js脚本),实现android本地方法js中的交互。 第一步: mainfest.xml中加入网络权限 第二步: 加载本地写好的ht

Beyond0525的专栏 16万+

Android基于WebViewJavaJS相互调用实现步骤,附带精简可行的DEMO

Android基于WebViewJavaJS相互调用实现步骤,附带精简可行的DEMO

1805

Android与js互相调用

有话要说: 本篇主要总结了简单的Android与js互相调用的方法。 在开发过程中遇到了需要在安卓中调用js方法的需求,于是将具体的实现过程总结成这篇博客。 效果: 其中“调用安卓方法”按钮是html中的按钮;“调用JS方法”按钮是app中的按钮。 本地HTML: 首先,在app根目录新建一个assets文件夹,并在文件夹内新建一个本地html文件,如下图 接着编写一个简单的html文件: 1 <html lang="zh-CN"> 2 <p id='p'

xiaodongvtion的专栏 5164

AndroidWebView使用html,且实现androidJS的互相调用

本文原创,转载注明出处JUSTYiSheng1、创建html文件       创建文件很简单,用基本的文本编辑器保存成.html格式即可        web.html文件如下&lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;script type="text/javascript"&gt; function javaToJS(...

JUSTYiSheng的博客 8441

如何在Android WebView 调用 Javascript 并返回值

如何在Android WebView调用 Javascript 并返回值 @author Anderson Mao, 2012-03-13   如何在Android WebView 调用 Javascript 并返回值 How Android WebView Call JavascriptFunction and Return Value to Java   Android WebVi

AndersonMao的专栏 8215

AndroidJava代码内嵌HTML网页JS代码互相调用

1.创建一个空项目 用Android studio创建一个空项目 2. 初始化项目 将项目设置成project视图 点击src,选择new,新建一个文件夹 选择main\assets 将html文件放在该目录下(css、js等也都一起放过来) 3.编写代码 完整代码在后边,看第5部分。这里的只是为了便于划分代码功能 3.1 java调用js java代码 button.setOnClickListener(view -> { webView.loadUrl("javascript

冷芝士鸭的学习笔记 3045

实战-安卓android java与vue js互相调用

第一部分:js调用android 1.这种情况,就是点击了web页面的控件,让android原生做出反应,如跳转或者处理方法 2.android代码要做的就是在写web页面的代码内部监听js点击的方法 3.这里监听的时候部分普通jsvue js 4.不管你用的什么web第三方控件都要实现下面的方法 // setJavaScriptEnabled这句代码在用TBS腾讯浏览服务的jar包时,显示过期...

三线程序员的博客 3773

android ,webView之间的互相传值,好用

Android中可以使用WebView加载网页,同时Android端的java代码可以与网页上的javascript代码之间相互调用。 效果图: (一)Android部分: 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

上孟的专栏 6597

WebView中Js、Java互相调用 of Android

一、Js调用Java 准备步骤 1.设置WebView支持Js代码 webview.settings.javaScriptEnabled = true 2.编写一个Js可以调用java类,在该类中, 允许js调用的方法需要添加一个方法注解(@JavascriptInterface) 3.给WebView设置步骤二新建的类的实例,并将该类取名(Js调用该实例的方法时,需要用到该名)...

SmallMonkey_1994的博客 366

JsBridge实现JavaScriptJava互相调用

JsBridge实现JavaScriptJava互相调用

idaretobe的专栏 1995

AndroidJavaScript互相调用分析

代码在Android Studio1.4, android的6.0的模拟器上测试没有问题,Android中的java方法js方法互相调用,根据有参无参,可以分为四种情况,以下逐一通过代码分析。java方法js方法互相调用的前提是需要设置settings.setJavaScriptEnabled(true); Android方法调用JavaScript,有参数在js中定义方法jsWithA

予人三的专栏 879

安卓混合开发实例——JS与Java的交互

今天说说安卓混合开发。 曾经有一个话题是web终会一统app,然后我们看到随着时间的推移。web越来越强大(H5啊,JS各种框架啊),但同时原生app也在不断发展。 或许在将来还会再有这种话题论战,但目前,混合开发,结合web原生app二者各自的优势,已经是众望所归了。其中最常见的一种方式,在安卓的webview中嵌套web,通过各类设计,让二者进行交互。使得用户体验上几乎无法分辨出究竟是否纯

LeBang的博客 4600

Android WebViewJavaScriptJava交互详解

为了确保方法能够被 JavaScript 成功调用开发者必须使用注解对目标方法进行标记。该注解自 API 17(Android 4.2)引入,旨在防止恶意脚本通过反射机制调用未公开的 Java 方法,从而提升安全性。以下是一个典型的 Java 接口类定义示例:return "{\"name\": \"张三\", \"age\": 28, \"role\": \"developer\"}";// 模拟登录逻辑代码逻辑逐行分析:第 1 行:定义名为JsBridge。

weixin_42355400的博客 1353

Android中如何实现WebView中的JavaScriptJava的安全互相调用

WebView中,我们经常需要实现JavaScriptJava之间的相互调用,以便在网页中调用原生的Android功能,或者在原生应用中调用网页中的JavaScript函数。通过注入Java对象到JavaScript中,我们可以在JavaScript调用Java的方法,而通过执行JavaScript代码,我们又可以在Java调用JavaScript的方法。我们可以通过对传递给。方法的JavaScript代码进行合法性检查,或者通过与后端进行沟通,确保执行的JavaScript代码是可信的。

ByteWhizX的博客 337

android webview js 交互框架,安卓中webviewjavascript的交互

当我们要实现丰富的图文混排效果的时候,我们一般会使用webview,这是一个功能十分强大的的控件,来看看官方的解释:A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content wit...

weixin_42508114的博客 345

Android WebView jsJava互相调用注意事项

Android WebView jsJava互相调用注意事项在android4.2以前,注入步骤如下: webview.getSetting().setJavaScriptEnable(true); class JsObject { public String toString() { return “injectedObject”; } } webView.addJavas

dongcfang_csdn的专栏 945
上一篇: Android开发,WebView下Java和JavaScript相互调用(1)
下一篇: Android开发,开源项目SlidingMenu的导入
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值