热门标签 | 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 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。




推荐阅读
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • HokoBlur项目地址:HokoFlyHokoBlur简介:aneasy-to-useblurlibraryforAndroid,supporte ... [详细]
  • 如何在方法上应用@ConfigurationProperties注解进行属性绑定 ... [详细]
  • 未定义的打字稿记录:探索其成因与解决方案 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 为了向用户提供虚拟应用程序,通常会在基础架构中部署StoreFront或Web Interface。为了确保安全的远程访问,通常需要在DMZ中配置Secure Gateway或Access Gateway。本文详细对比了这两种界面工具的功能特性,包括用户管理、安全性、性能优化等方面,为企业选择合适的解决方案提供了全面的参考。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • IOC是spring的核心技术之一。在spring中IOC(控制反转)就是由IOC容器来控制程序࿰ ... [详细]
  • iOS9中的WebKit 与 Safari带来的惊喜
    iOS9中的WebKit与Safari带来的惊喜-每个用过UIWebView的iOS开发者对其诸多的限制和有限的功能也深有感触。悻然,自iOS8推出WebKit框架后将改变这一窘境 ... [详细]
  • Android常见漏洞漏洞名称:Log敏感信息泄露漏洞描述: 程序运行期间打印了用户的敏感信息,造成泄露修改建议: 建议禁止隐私信息的log  ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
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社区 版权所有