android native.js,Android Native与JS通信互调
写在最前:
看Android最新技术总结,关注公众号:
最近因为App与H5交互逻辑太乱,所以抽空梳理了下;对目前App与H5的各种交互通信做个总结,自取适合自己的交互方式。
一、H5调用原生的native方法
1、拦截shouldOverrideUrlLoading方法
借助WebView在加载一个url的时候都会调用WebViewClient类的shouldOverrideUrlLoading(WebView view, String url)方法这一特性,我们可以针对参数的url定义好特殊的schema协议,来调用native提供的不同的逻辑;首先我们需要为WebView设置WebViewClient对象;接着重写shouldOverrideUrlLoading(WebView view, String url)方法;
这里先说明下App的schema,我们需要针对我们app定义一套自己的schema规范;schema指就是与H5约束好的字符串。h5在调用native方法的时候,需要以约束好的schema为协议,调用native方法。比如 nativeApp://xxxPath?xxxParam=yyy; 其中:nativeApp字符串指schame协议名称,每个App自己取就可以,我们只拦截该协议下的url请求,其他的可以不处理;xxxPath指关键路径,对应自己的native功能,比如nativeApp://login 表示调用本地登录界面等等;xxxParam=yyy,表示传递的参数,比如nativeApp://login?name=wang;
2、拦截alert、prompt、confirm处理方法
该方式与上面的拦截处理类似,只是针对H5拦截的地方不同;H5端在调用window.alert("nativeApp://login?name=wang")时,会调用WebChromeClient类的onJsAlert方法,我们在该方法中处理schema,调用native方法;
上面的实现是以alert拦截为实例,其他的prompt、confirm完全也可以,一般与H5端约束好就可以
3、addJavascriptInterface注册Android对象供H5调用
通过调用webView.addJavascriptInterface(对象实例, "对象名称")方法,注册一个Android对象到H5端;注册到H5的对象的方法需要添加@JavascriptInterface 注解,这样H5端才能正常调用;
H5端使用方式:window.appObject.alert(“我是H5来的提示”)就可以调用到native的方法
二、Android native端调用H5端方法
Android native目前通过WebView.loadUrl("javascript:方法名('参数')")来调用H5的方法;如H5有如下方法:
window.showCity = function(city){
console.log("我是Native传递来的城市:"+city)
}
Android调用:
mWebView.loadUrl(“javascript:window.showCity('北京')”);
在Android版本大于4.4(SDK19)时,可以使用evaluateJavascript(js,callBack)来调用H5端方法;如下:onReceiveValue(String value)的参数value是js方法的返回值;
android native.js,Android Native与JS通信互调相关推荐
- index android js,reactjs – React Native项目没有index.ios.js或index.android.js
首先确保您已完成以下下载: > Java Sdk > Android Studio > Xcode(如果是OSX) > HomeBrew(在OSX的情况下安装节点) >节 ...
- android webview java_Android WebView Java和JS通信
前言: Android开发中,经常使用WebView来加载网页,而和WebView进行交互全部通过Java和Js互相调用来完成的.这篇文章就主要学习这块的知识. 本示例中,主要解决以下问题: Java ...
- Android Java层和Native层通信入门指南开篇
Android Java层和Native层通信入门指南开篇 引言 做Android平台系统开发的小伙伴,应该经常会遇到要打通Android Framework层和C/C++层通信的通道问 ...
- WebViewJavascriptBridge 进行js 与native通信。
1, iOS端加载web页面.开启日志并给webView建立JS与OC的桥梁 - (void)viewWillAppear:(BOOL)animated { if (_bridge) { retur ...
- rn+与android+交互,React native 与Android原生交互方式(一)
前言## 最近在做React Native开发的时候避免不了的需要原生模块和JS之间进行交互,其实RN和原生的通信大致分为两种情况:一种是Android主动向RN端发送事件和数据,另外一种是RN端被动 ...
- React Native在Android当中实践(五)——常见问题
React Native在Android当中实践(一)--背景介绍 React Native在Android当中实践(二)--搭建开发环境 React Native在Android当中实践(三)--集 ...
- 20分钟理解React Native For Android原理
原址:http://doslin.com/2017/03/15/react-native-source-code-analysis/ 前言 文中所有 RN 缩写指代React Native For A ...
- 混合开发架构|Android工程集成React Native、Flutter、ReactJs
混合开发架构|Android工程集成React Native.Flutter.ReactJs 架构设计说明 创建安卓原生工程 创建Flutter 集成嵌入原生工程 创建React Native 解决R ...
- React Native在Android当中实践(一)——背景介绍
React Native在Android当中实践(一)--背景介绍 React Native在Android当中实践(二)--搭建开发环境 React Native在Android当中实践(三)--集 ...
- 手机网站支付转Native支付--Android
背景 为了节约开发成本,很多Native-H5混合App采用手机网站支付的方式去实现支付模块.但手机网站支付的网络依赖比较严重,也通常需要经过更多的验证,这种种原因导致手机网站支付的成功率比Nativ ...
最新文章
- 国家公布人工智能四大平台 AI的春天到了?
- 毕业设计 c语言编译器的设计开发-字节代码格式设计与实现 开题报告,C语言编译器设计与实现...
- Axure教程 axure新手入门基础(3) 简单易上手
- SAP License:烟草行业ERP选型
- mapper mysl实现批量插入 更新
- 《图论及其应用》学习笔记(匹配和因子分解)
- cad打开a3样板图形_CAD中怎样设置A3图纸模板
- 服务器协议密码,Radius协议 - 如何将密码发送到服务器?
- Win10怎么录制高清的电脑屏幕?Win10屏幕录制工具哪个好?
- 公众号运营情况分析 DAY02(获取公众号文章阅读量、在看和评论内容)
- js首次修改html无效,浅谈jQuery添加的HTML,JS失效的问题
- 二叉树广度和深度遍历的全部算法
- c语言自动随机发牌给四个人(没有大小王)
- C语言求任意数的阶层
- unity Gpu Instance
- 常见的PS安装错误代码与解决方法
- 国内十大开源linux社区
- 偏前端 + rsa加解密 + jsencrypt.min.js--(新增超长字符分段加解密)
- 净现值、投资回收期例题讲解
- 速写总是画不好发型?绘画手法很重要