热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android/iOSWebview容器下JSBridgeSDK原理浅析——前端视角

在Hybrid开发的过程中,由于前端和客户端同学存在认知差异,导致在解决一些bridge问题时存在一定的沟通成本和信息不对称。本文从前端视角切入

在 Hybrid 开发的过程中,由于前端和客户端同学存在认知差异,导致在解决一些 bridge 问题时存在一定的沟通成本和信息不对称。本文从前端视角切入,讲述 bridge 方法如何和客户端进行交互,以及在此过程中进行的各种中间处理。

Native 与 Webview 的通信方式

  • Javascript 调用 Native 方法

在 Webview 内,Javascript 调用 Native 方法主要存在 3 种方式:

  1. Native 向 Webview 的 Context ( 即 Webview 中的 window ) 注入一个暴露指定 Native 方法 ( Android )接受 Javascript 消息 ( iOS ) 的对象。

  2. 拦截 Webview 内的某类特定的 URL Scheme,并根据 URL 来执行对应的 Native 方法。

  3. 拦截 Javascript 的 console.logalertpromptconfirm,并执行对应的 Native 方法。

在目前主流的 JSSDK 实现中,主要采用了前两种通信方式,并以注入式为主、拦截式为兜底策略进行通信,本文也会主要介绍基于这两种方式的实现原理和应用场景。

注入式( 即第一种方式 )有更好的性能和更优的开发体验,但并非兼容所有系统版本

Android 的 JavascriptInterfaceAndroid 4.2 版本前因没有注解导致暴露了包括系统类 ( java.lang.Runtime ) 方法在内的其他不应暴露的接口,存在较大的安全隐患;而 iOS 的 WKScriptMessageHandler 仅支持 iOS 8.0+ 的版本。

因此、在较低的系统版本中,会采用拦截式( 即第二种方式 )作为与 Native 通信的方法。

  • Native 调用 Javascript 方法

Native 调用特定 Webview 内的 Javascript 方法主要存在 2 种方式:

  1. 直接通过 URL 执行 Javascript 语句,例如 Javascript:alert('calling...');

  2. 通过 Android 和 iOS 同名的方法 evaluateJavascript() 来执行 Javascript 语句。

第二种方式仅兼容 Android 4.4+ 和 iOS 8.0+,而相比第一种,它的优势在于可以获取到 Javascript 的返回值,是官方提供的推荐通信方式。

调用 NATIVE 方法

结合目前各类主流的 JSSDK 实现,调用 NATIVE 方法的流程大致如下:

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。




推荐阅读
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 01mui框架使用概述
    1MUI概述1.1MUI诞生背景?性能和体验的差距,一直是手机APP开发者放弃HTML5的首要原因。浏览器默认控件样式又少又丑,制作一 ... [详细]
  • Android Studio中的IBM MobileFirst Compile问题 - IBM MobileFirst Compile in Android Studio Issue
    IbuiltaMultipageapplicationbyusingIBMMobileFirst,accordingto据我所知,我使用IBMMobileFirst构建了一个 ... [详细]
  • 安卓开发入门!BAT大厂面试基础题集合,顺利通过阿里Android岗面试
    其实不是Android不行了,而是你跟不上了我的很多读者都在反馈说,现在一个岗位可以收到的简历数,是前几年的几倍。我们必须承认ÿ ... [详细]
  • remote 移除_remote模块的使用(四)
    微信公众号:[猫十二的日常],欢迎留言和指出问题a在electron中的一些模块,它是区分进程的,有些模块只能是主进程可以使 ... [详细]
  • Androidx5webview,截长图有不模糊的写法吗,现在截图出来都很模糊.有什么解决方法吗? ... [详细]
  • 开发笔记:Appium自动化测试之微信h5元素识别和代码实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Appium自动化测试之微信h5元素识别和代码实战相关的知识,希望对你有一定的参考价值。总会有人问微信的自动化测试怎么做 ... [详细]
author-avatar
mobiledu2502852497
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有