首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android-使用addJavaScriptInterface从Javascript返回一个值

Android 使用 addJavaScriptInterface 从 Javascript 返回值

在 Android 开发中,我们常常需要从 Javascript 中获取数据或执行某些操作。在这种情况下,我们可以使用 addJavaScriptInterface 的方法。该方法允许我们将一个本地 Java 对象与一个 Javascript 对象关联起来,从而从 Javascript 中返回一个值。

概念

addJavaScriptInterface 是一个属于 Android WebView 的函数。WebView 是一种用于显示 Web 内容的控件。通过 addJavaScriptInterface 方法,我们可以将本地 Java 对象与 WebView 中的 Javascript 对象关联起来,从而在 WebView 中执行 Javascript 代码。

分类

addJavaScriptInterface 可以分为以下两类:

  1. 静态方法:将 Java 方法作为静态方法实现,通过 WebView.addJavascriptInterface 方法传入。
  2. 动态方法:将 Java 方法作为动态方法实现,通过 WebView.evaluateJavascript 方法传入。

优势

使用 addJavaScriptInterface 具有以下优势:

  1. 跨平台:由于 Java 和 Javascript 是分离的,因此可以在不同的平台上使用相同的代码。
  2. 灵活性:使用 addJavaScriptInterface 可以轻松地实现 Java 和 Javascript 之间的交互。
  3. 安全性:通过将 Java 和 Javascript 代码分离,可以降低安全风险。

应用场景

addJavaScriptInterface 的应用场景包括:

  1. 调用本地方法:从 Javascript 代码中调用 Android 平台中的本地方法。
  2. 调用 Java 代码:从 Javascript 代码中调用 Android 平台中的 Java 代码。
  3. 实现 WebApp:使用 addJavaScriptInterface 实现 WebApp 的功能。

推荐的腾讯云相关产品

对于 Android 开发来说,腾讯云提供了以下相关产品:

  1. 腾讯云推送:实现 Android 推送功能,可联系产品经理获取免费试用。
  2. 腾讯云音视频:提供音视频解决方案,包括直播、点播等。
  3. 腾讯云存储:提供云存储服务,可用于存储音视频文件等。
  4. 腾讯云服务器:提供高性能、高可用的云服务器,可用于搭建 Android 开发环境。

产品介绍链接地址

  1. 腾讯云推送:腾讯云推送服务
  2. 腾讯云音视频:腾讯云音视频解决方案
  3. 腾讯云存储:腾讯云对象存储服务
  4. 腾讯云服务器:腾讯云服务器CVM

请注意,这里提供的链接地址可能随腾讯云产品的更新而改变。在使用相关产品时,请确认产品的最新信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript】函数 ⑤ ( return 关键字终止函数 | return 关键字返回一个 | return 关键字返回多个 - 返回数组对象 )

一、JavaScript 函数返回 1、return 关键字终止函数 return 关键字 除了 返回 函数返回 功能之外 , 还具有 终止 函数执行 的作用 , return 关键字后面的语句...: 2、return 关键字返回一个 在函数中 , return 关键字 只能 返回一个 返回 ; 如果 使用 return 关键字 返回 多个返回 , 并且 使用逗号隔开 , 则只有最后一个返回生效...; 代码示例 : 在下面的代码中 , return 关键字 返回了 三个 返回 , 分别是 num1, num2, num1 + num2 , 此时只有最后一个返回是生效的 , 也就是返回 num1... 执行结果 : 只返回了最后一个 ; 3、return 关键字返回多个 - 返回数组对象 如果需要返回多个 , 可以 使用 return 关键字 返回一个数组...+ num2] , 此时数组对象被当做一个返回对待 , 因此 可以使用 return 关键字返回 ; <!

8010

Android 混合开发之JsBridge

、loadUrl("javascript:...")...再比如:有些人通过prompt方式实现H5通知Native,而prompt是一个可能产生问题的同步方法,一旦无法返回,整个js环境就会挂掉,导致所有H5页面都无法打开,下面简单说下两种实现,一是通过addJavascriptInterface...流程大概类似,同样可以基于一个消息ID完成回调,不过更加灵活,因为Native通知前端的接口不太好统一,具体使用自己把握。...prompt的一个坑导致js挂掉 表现上来看,onJsPrompt必须执行完毕,prompt函数才会返回,否则js线程会一直阻塞在这里。...实现,可以避免prompt挂掉js环境的问题 通过@JavascriptInterface的方法中不要同步处理耗时操作,需要返回的方法需要阻塞调用(尽量减少) 如果非要用prompt,尽量不要自己destroy

2.1K20

WebView 和 JS 交互,如何将 Java 对象和 List 传给 JS ?

随着混合开发模式比较流行,很多时候,我们需要在原生的基础上,使用 WebView 加载网页,这样控制更加方便。今天我们来看看,如何将 Java 对象 和 List 集合传给 JS 调用。...1 如何将 Java 对象实例传给 JS 其实将我们在 Android 原生中将 Java 对象实例传给 JS 承认并且可以使用的对象,方法非常简单。我们来举个例子。...它就是我们传进行的 Java 对象实例。直接就可以使用,获取了年龄,名字,和性别属性。那我们该如何声明该对象,才会被 JS 所承认呢?...("javascript:callJS()"); wv.addJavascriptInterface(p, "person"); 的意思就是注入 Java 对象 p 给 webview 为 person...其实按道理来说,是不可以将List集合直接传给 JS 使用,但是既然对象可以传,JS 可以调用 java 对象,也可以调用 Android 中的方法,那我们就一拆分的形式传过去。

8.5K100

Carson带你学Android:你不知道的 WebView 使用漏洞

漏洞产生原因 JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射: webView.addJavascriptInterface(new JSObject...3:以后,就可以调用静态方法来执行一些命令,比如访问文件的命令 getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); // 执行命令后返回的输入流中得到字符串...具体步骤如下: 继承 WebView ,重写 addJavascriptInterface 方法,然后在内部自己维护一个对象映射关系的 Map; 将需要添加的 JS 接口放入该Map中 每次当 WebView...关于Android返回给JS的:可通过prompt()把Java中方法的处理结果返回到Js中 具体需要加载的JS代码如下: javascript:(function JsAddJavascriptInterface...(arg0)和onImageClick(arg0, arg1, arg2) // 如果有返回,就添加上return if (typeof(window.jsInterface)!

1.1K10

android调用服务端的js

1,使用场景 我们很多时候要使用WebView来展示一个网页,现在很多应用为了做到服务端可控,很多结果页都是网页的,而不是本地实现,这样做有很多好处,比如界面的改变不需要重新发布新版本,直接在Server...用网页来展示界面,通常情况下都或多或少都与Java代码有交互,比如点击网页上面的一个按钮,我们需要知道这个按钮点击事件,或者我们要调用某个方法,让页面执行某种动作,为了实现这些交互,我们通常都是使用JS...我们一起来看看关于addJavascriptInterface方法在Android官网的描述: This method can be used to allow JavaScript to control...【2】关于返回,可以通过prompt返回回去,这样就可以把Java中方法的处理结果返回到Js中。...   说明: 1,上面代码中的jsInterface就是要注册的对象名,它注册了两个方法,onButtonClick(arg0)和onImageClick(arg0, arg1, arg2),如果有返回

1.8K90

android软件开发之webView.addJavascriptInterface循环渐进【一】

Useful for      * javascript中提供了一个叫“提示框” 。这是很有用的      * debugging your javascript....), "demo");   这句话 中后面它加了一个demo这个字符.我可以理解成 addJavascriptInterface 的前一个参数为HTML中的一个方法,当然我更喜欢说他为函数。...其实这个很简单,只要使用   mWebView.loadUrl("javascript:wave()");   这句话就可以了。 这样我主解读完Google给我提供的一个demo了。...下面就是让我来试一下吧,试试他的这个demo吧,因为人家给提供了源码,所以我就不贴的啦,大家把他的源码贴上去就可以实现这个啦 在下一集里我将会带领大家来怎么使用 addJavascriptInterface... 怎么样从一个JavaScript 的函数中获得一个返回

1.3K70

Carson带你学Android:你要的WebView与 JS 交互方式都在这里了

()将Java对象映射到JS对象 //参数1:Javascript对象名 //参数2:Java对象名 mWebView.addJavascriptInterface...如果JS想要得到Android方法的返回,只能通过 WebView 的 loadUrl ()去执行 JS 方法把返回传递回去,相关的代码如下: // Android:MainActivity.java...下面的例子将用**拦截 JS的输入框(即prompt()方法)**说明 : 常用的拦截是:拦截 JS的输入框(即prompt()方法) 因为只有prompt()可以返回任意类型的,操作最全面方便、更加灵活...;而alert()对话框没有返回;confirm()对话框只能返回两种状态(确定 / 取消)两个 步骤1:加载JS代码,如下: javascript.html 以.html格式放到src/main...uri.getQueryParameterNames(); //参数result:代表消息框的返回

80920

Android:你要的WebView与 JS 交互方式 都在这里了

特点 优点:不存在方式1的漏洞; 缺点:JS获取Android方法的返回复杂。...如果JS想要得到Android方法的返回,只能通过 WebView 的 loadUrl ()去执行 JS 方法把返回传递回去,相关的代码如下: // Android:MainActivity.java...下面的例子将用拦截 JS的输入框(即prompt()方法)说明 : 常用的拦截是:拦截 JS的输入框(即prompt()方法) 因为只有prompt()可以返回任意类型的,操作最全面方便、更加灵活...;而alert()对话框没有返回;confirm()对话框只能返回两种状态(确定 / 取消)两个 步骤1:加载JS代码,如下: javascript.html 以.html格式放到src/main...uri.getQueryParameterNames(); //参数result:代表消息框的返回

4.9K31

Android开发笔记(一百五十一)WebView与JavaScript交互的四种形式

App通知Web执行某项动作 Web提供一个JavaScript方法,然后App由WebView调用loadUrl加载该JS方法,具体的App代码如下所示: wv_js.loadUrl("javascript...Web通知App执行某项动作 App需要定义一个专门给JS使用的类,并在该类中实现JS要调用的方法,具体的类代码如下所示: private final class Client { @JavascriptInterface...:"+msg; } } 接着还要调用WebView对象的addJavascriptInterface方法,给这个新类注册一个实例名,然后JS才能通过该实例名调用App的方法。...Web主动App获取信息 该行为的主要流程同行为三,区别在于App方法的返回类型由void改为String,然后JS即可从App获得返回信息。...JS调用App方法,返回中的中文是正常;但App获取JS方法,返回的中文却是“\u”打头的字符串,所以要先将JS返回的字符串做转义处理,转义后的字符串才是App能够处理的正常汉字。 5.

1.2K10

JS & JAVA(Android) 的互相调用(简介)

mWebView.addJavascriptInterface(MainActivity.this,"javaInterface"); 说到调用方法, 那么我们首先得有一个方法可以让我们去调用,在Android...javascript:changeColor()"); 在android 4.4 之后我们可以使用最新的办法,这个也是用于如果js代码有返回的话我们可以使用String来接收; mWebView.evaluateJavascript...一、 Android 4.4 之前 JAVA 调用J S并取到返回 目前的解决方案是通过java反射机制 在android.webkit包中有个BrowserFrame私有类,该类中有个Native...2.将布局文件中的WebView修改为自定义的WebView 3.使用新的WebView调用方法,执行js方法获取返回 自定义WebView如下 public String stringByEvaluatingJavaScriptFromString...三、调试 Chrome 远程调试 如果你使用的是 Android 4.4 及其以上版本的 WebView ,那么这将是一个非常有用的功能,具体可以参考这个链接。 到此结束,再会。

72820

WebView深度学习(三)之WebView的内存泄漏、漏洞以及缓存机制原理和解决方案

漏洞产生原因: js调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射: webView.addJavascriptInterface(...比如访问文件的命令 getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); // 执行命令后返回的输入流中得到字符串...关于Android返回给JS的:可通过prompt()把Java中方法的处理结果返回到Js中 具体需要加载的JS代码如下: javascript:(function JsAddJavascriptInterface...(arg0)和onImageClick(arg0, arg1, arg2) // 如果有返回,就添加上return if (typeof(window.jsInterface)!...WebActivity,这样由于该 WebActivity 无法加载该文件,就会将该文件下载到 sd 卡下面,然后就可以 sd 卡上读取这个文件了 (6) 最终解决方案 1)对于不需要使用 file

2.6K10

Android:你不知道的 WebView 使用漏洞

漏洞产生原因 JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射: webView.addJavascriptInterface(new JSObject...3:以后,就可以调用静态方法来执行一些命令,比如访问文件的命令 getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); // 执行命令后返回的输入流中得到字符串...具体步骤如下: 继承 WebView ,重写 addJavascriptInterface 方法,然后在内部自己维护一个对象映射关系的 Map; 将需要添加的 JS 接口放入该Map中 每次当...关于Android返回给JS的:可通过prompt()把Java中方法的处理结果返回到Js中 具体需要加载的JS代码如下: javascript:(function JsAddJavascriptInterface...(arg0)和onImageClick(arg0, arg1, arg2) // 如果有返回,就添加上return if (typeof(window.jsInterface)!

3.1K20

WebView深度学习(一)之WebView的基本使用以及Android和js的交互

} }); } (3)两种方法的对比 调用方式 优点 缺点 使用场景 调用loadUrl() 方便简洁 效率低,获取返回麻烦 不需要获取返回,对性能要求较低时 调用...备注 alert() 弹出警告窗 没有 在文本加入\n可换行 confirm() 弹出确认框 连个返回 返回布尔,通过该可以判断点击是确认还是取消(true表示点击了确认,false表示点击了取消...) prompt() 弹出输入框 任意设置返回 点击确认返回输入框中的,点击取消返回null 2.原理:Android通过 WebChromeClient 的onJsAlert()、onJsConfirm...因为只有prompt()可以返回任意类型的,操作最全面方便、更加灵活;而alert()对话框没有返回;confirm()对话框只能返回两种状态(确定 / 取消)两个。...的方法shouldOverrideUrlLoading()回调拦截url 不存在漏洞问题 使用复杂,需要进行协议约束,native层到web层传递比较繁琐 不需要返回情况下互调场景 通过 WebChromeClient

5.9K31

JSBridge深度剖析

JS方法执行,但是无法获取该方法的返回 4.4之后,通过evaluateJavascript异步调用JS方法,并且能在onReceiveValue中拿到返回 不适合传输大量数据(大量数据建议用接口方式获取...Native暴露的api,并且能得到相应返回 注:说到WebView中接口隐患的问题,这里大家可以参考WebViw漏洞利用,不过Android发展到现在,这个漏洞基本没有了。...NSString *title = [NSString stringWithFormat:@"%@",[args objectAtIndex:0]]; //做一些自己的逻辑 //返回一个...其实使用JSBridge有很多方面的考虑: Android4.2以下,addJavascriptInterface方式有安全漏掉 iOS7以下,JS无法调用Native url scheme交互方式是一套现有的成熟方案...data 使用内部早就创建好的一个隐藏iframe来触发scheme //创建隐藏iframe过程 var messagingIframe = document.createElement('iframe

3.4K60

【Android开发进阶系列,整理】Android与h5交互专题

①调用H5中无参无返回的方法     直接可以调用mWebView.loadUrl("JavaScript:show()");图2为H5中show()方法。...mWebView.loadUrl("JavaScript:show()"); 图2:android调用H5中无参数无返回的方法,截图为H5中的方法 1.2.3 调用H5中带返回的方法...②调用H5中带返回的方法 可以调用mWebView.evaluateJavascript()方法,该方法只在安卓4.4以上版本适用,图3为Android调用H5中带返回的方法。...    在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法  public class JsInteration {     @JavascriptInterface...,只有安卓4.4以上才能用webView.evaluateJavascript方法直接拿到返回;当版本低于4.4的时候,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将返回

41840

Android WebView与JS交互全面详解(小结)

调用 Android 代码 2.2.1 方法分析 方式1:通过 WebView的addJavascriptInterface()进行对象映射 步骤1:定义一个与JS对象映射关系的Android类:AndroidtoJs...特点 优点:不存在方式1的漏洞; 缺点:JS获取Android方法的返回复杂。...如果JS想要得到Android方法的返回,只能通过 WebView 的 loadUrl ()去执行 JS 方法把返回传递回去,相关的代码如下: // Android:MainActivity.java...下面的例子将用拦截 JS的输入框(即prompt()方法) 说明 : 常用的拦截是:拦截 JS的输入框(即prompt()方法) 因为只有prompt()可以返回任意类型的,操作最全面方便、更加灵活...;而alert()对话框没有返回;confirm()对话框只能返回两种状态(确定 / 取消)两个 步骤1:加载JS代码,如下: javascript.html 以.html格式放到src/main

5.8K20
领券