写在最前:

看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通信互调相关推荐

  1. index android js,reactjs – React Native项目没有index.ios.js或index.android.js

    首先确保您已完成以下下载: > Java Sdk > Android Studio > Xcode(如果是OSX) > HomeBrew(在OSX的情况下安装节点) >节 ...

  2. android webview java_Android WebView Java和JS通信

    前言: Android开发中,经常使用WebView来加载网页,而和WebView进行交互全部通过Java和Js互相调用来完成的.这篇文章就主要学习这块的知识. 本示例中,主要解决以下问题: Java ...

  3. Android Java层和Native层通信入门指南开篇

        Android Java层和Native层通信入门指南开篇 引言    做Android平台系统开发的小伙伴,应该经常会遇到要打通Android Framework层和C/C++层通信的通道问 ...

  4. WebViewJavascriptBridge 进行js 与native通信。

    1,  iOS端加载web页面.开启日志并给webView建立JS与OC的桥梁 - (void)viewWillAppear:(BOOL)animated { if (_bridge) { retur ...

  5. rn+与android+交互,React native 与Android原生交互方式(一)

    前言## 最近在做React Native开发的时候避免不了的需要原生模块和JS之间进行交互,其实RN和原生的通信大致分为两种情况:一种是Android主动向RN端发送事件和数据,另外一种是RN端被动 ...

  6. React Native在Android当中实践(五)——常见问题

    React Native在Android当中实践(一)--背景介绍 React Native在Android当中实践(二)--搭建开发环境 React Native在Android当中实践(三)--集 ...

  7. 20分钟理解React Native For Android原理

    原址:http://doslin.com/2017/03/15/react-native-source-code-analysis/ 前言 文中所有 RN 缩写指代React Native For A ...

  8. 混合开发架构|Android工程集成React Native、Flutter、ReactJs

    混合开发架构|Android工程集成React Native.Flutter.ReactJs 架构设计说明 创建安卓原生工程 创建Flutter 集成嵌入原生工程 创建React Native 解决R ...

  9. React Native在Android当中实践(一)——背景介绍

    React Native在Android当中实践(一)--背景介绍 React Native在Android当中实践(二)--搭建开发环境 React Native在Android当中实践(三)--集 ...

  10. 手机网站支付转Native支付--Android

    背景 为了节约开发成本,很多Native-H5混合App采用手机网站支付的方式去实现支付模块.但手机网站支付的网络依赖比较严重,也通常需要经过更多的验证,这种种原因导致手机网站支付的成功率比Nativ ...

最新文章

  1. 国家公布人工智能四大平台 AI的春天到了?
  2. 毕业设计 c语言编译器的设计开发-字节代码格式设计与实现 开题报告,C语言编译器设计与实现...
  3. Axure教程 axure新手入门基础(3) 简单易上手
  4. SAP License:烟草行业ERP选型
  5. mapper mysl实现批量插入 更新
  6. 《图论及其应用》学习笔记(匹配和因子分解)
  7. cad打开a3样板图形_CAD中怎样设置A3图纸模板
  8. 服务器协议密码,Radius协议 - 如何将密码发送到服务器?
  9. Win10怎么录制高清的电脑屏幕?Win10屏幕录制工具哪个好?
  10. 公众号运营情况分析 DAY02(获取公众号文章阅读量、在看和评论内容)
  11. js首次修改html无效,浅谈jQuery添加的HTML,JS失效的问题
  12. 二叉树广度和深度遍历的全部算法
  13. c语言自动随机发牌给四个人(没有大小王)
  14. C语言求任意数的阶层
  15. unity Gpu Instance
  16. 常见的PS安装错误代码与解决方法
  17. 国内十大开源linux社区
  18. 偏前端 + rsa加解密 + jsencrypt.min.js--(新增超长字符分段加解密)
  19. 净现值、投资回收期例题讲解
  20. 速写总是画不好发型?绘画手法很重要

热门文章

  1. 定点化_mif文件生成
  2. 测试配置yum仓库的http镜像
  3. linux dhcp 服务(转)
  4. 案例精解企业级网络构建
  5. 十五步骤手把手学会制作网吧XP母盘制作
  6. 使用.NET Remoting开发分布式应用——基于租约的生存期(转载)
  7. 熊猫数据集_处理熊猫数据框中的列表值
  8. leetcode 263. 丑数
  9. MySQL-InnoDB索引实现
  10. 引用自己创建的css样式表_如何使用CSS创建联系表