返回顶部
首页 > 资讯 > 精选 >JS中bridge的原理与封装实例分析
  • 581
分享到

JS中bridge的原理与封装实例分析

2023-07-02 13:07:15 581人浏览 独家记忆
摘要

本篇内容主要讲解“js中bridge的原理与封装实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中bridge的原理与封装实例分析”吧!一、hybird背景介绍一般原生app发版周期长

本篇内容主要讲解“js中bridge的原理与封装实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中bridge的原理与封装实例分析”吧!

    一、hybird背景介绍

    一般原生app发版周期长,而WEB版的app 开发速度快,周期短,所以hybird-H5 就是,web页面嵌入到app 的webview中,把Bridge作为native 与 web 页面沟通的桥梁。

    1、借助原生可以实现以下能力

    • 跳转原生页面

    • 获取原生数据

    • 调用原生功能

    • 其他

    二、 我们可以看一下纯H5和 app应用之间的区别

    JS中bridge的原理与封装实例分析

    三、JsBridge 原理以及实现方式

    从词意就了解到是js和Native与native之沟通的桥梁,实际上可以说是一种通信方式,而这种方式也类比于JSONP的交互方式,只是类比的对象放到了js与native身上,Native通过桥来调用js的方法,相反js通过桥也能调起native的一些功能。

    1、 javascript调用Native-注入api方式

    通过WebView提供的接口,向JavaScript的window中注入对象或者方法,让JavaScript调用时,直接执行相应的Native代码逻辑,达到JavaScript调用Native的目的。

    前端执行调用方式:

    iOSwindow.jsSendMessage(message);Androidwindow.jsSendMessage.getNativeData()

    2、JavaScript调用Native-拦截URLSCHEME

    行为(应用的某个功能)         |scheme://[path][?query]    |                    |应用标识 功能需要的参数

    前端的一个调用方式:

    js直接请求定义好的bridge://loaded协议就能触发native端的拦截

    例如:

    <href="bridge://loaded" rel="external nofollow" >触发app</a>

    3、两种方式优缺点

    目前不建议只使用拦截URLScheme解析参数的形式,主要存在几个问题:

    • 连续调用location.href会出现消息丢失,因为WebView限制了连续跳转,会过滤掉后续的请求。

    • URL会有长度限制,一旦过长就会出现信息丢失因此,类似WebViewJavaScriptBridge,JsBridge这类库,就结合了注入API的形式一起使用

    四、 现有开源解决方案

    • iOS: WebViewJavascriptBridge

    • Android: JsBridge

    五、我司使用的方案

    我司主要使用的是注入API方式:

    • 调用app的方法,并返回promise的结果

    • 根据当前的事件,注册成功回调,失败回调,挂载到window上

    • 针对安卓和ios, 需要兼容数据格式

    • 在根据安卓和ios判断执行不同的方法

    • Android 传送字符串

    • iOS 传送 json

    代码如下: 核心逻辑如下

     if (isAndroid) {        data = JSON.stringify(data)        // 安卓挂载的方法        window.JSActionBridge.handlerAction(            event,            data,            successName,            failName        )    }    if (isIOS) {   // ios挂载的方法  window.webkit.messageHandlers.JSActionBridge.postMessage({            method: 'handlerAction',            data: {                actionEvent: event,                paramsJsonValue: data,                successCallback: successName,                errorCallback: failName            }        })    }

    注册app 调用的方法:

    reGISterFn (fnName, fn) {    if (typeof fnName !== 'string') {        throw TypeError('Illegal fnName: Not an string')    }    if (typeof fn !== 'function') {        throw TypeError('Illegal fn: Not an function')    }    window[fnName] = function (data) {        if (isIOS) {            fn(data)        }        if (isAndroid) {            data = data || '{}'            fn(JSON.parse(data))        }    }},

    注销app调用的方法:

    unregisterFn (fnName) {    if (typeof fnName !== 'string') {        throw TypeError('Illegal fnName: Not an string')    }    delete window[fnName]},

    到此,相信大家对“JS中bridge的原理与封装实例分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: JS中bridge的原理与封装实例分析

    本文链接: https://lsjlt.com/news/342131.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • JS中bridge的原理与封装实例分析
      本篇内容主要讲解“JS中bridge的原理与封装实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中bridge的原理与封装实例分析”吧!一、hybird背景介绍一般原生app发版周期长...
      99+
      2023-07-02
    • JS中bridge的原理与封装
      目录一、hybird背景介绍1、借助原生可以实现以下能力二、 我们可以看一下纯H5和 app应用之间的区别三、JsBridge 原理以及实现方式1、 JavaScript调用Nati...
      99+
      2024-04-02
    • vue封装组件js实例分析
      本文小编为大家详细介绍“vue封装组件js实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue封装组件js实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是组件化:组件化就是将一个页面拆分成一...
      99+
      2023-06-30
    • JS组件封装的示例分析
      这篇文章主要介绍了JS组件封装的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、扩展已经存在的组件1、需求背景很多时候,我们使用j...
      99+
      2024-04-02
    • 原生JS封装animate运动框架的示例分析
      小编给大家分享一下原生JS封装animate运动框架的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如下所示:<!DOCTYPE html> <html...
      99+
      2024-04-02
    • js中this原理的示例分析
      这篇文章主要介绍了js中this原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先我们来概括下this.this是一个对象,一...
      99+
      2024-04-02
    • 原生js封装添加class,删除class的示例分析
      小编给大家分享一下原生js封装添加class,删除class的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、添加cl...
      99+
      2024-04-02
    • 基于原生ajax与封装ajax的示例分析
      这篇文章将为大家详细讲解有关基于原生ajax与封装ajax的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当我们不会写后端接口来测试ajax时,我们可以使用nod...
      99+
      2024-04-02
    • sqlite操作与封装的示例分析
      小编给大家分享一下sqlite操作与封装的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ocsqlite.h[plain...
      99+
      2024-04-02
    • 如何使用原生js封装的ajax实例
      这篇文章主要为大家展示了“如何使用原生js封装的ajax实例”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用原生js封装的ajax实例”这篇文章吧。实例如...
      99+
      2024-04-02
    • js中Proxy的原理分析
      这篇文章给大家分享的是有关js中Proxy的原理分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是代理模式引入一个现实生活中的案例我们作为用户需要去如何评估一个房子的好坏、如何办理住房手续等一些列繁琐的事物...
      99+
      2023-06-15
    • js中的原型的示例分析
      小编给大家分享一下js中的原型的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在讲js的原型之前,必须先了解下Objec...
      99+
      2024-04-02
    • python封装实例代码分析
      这篇“python封装实例代码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pytho...
      99+
      2024-04-02
    • JS组件之bootstrap treegrid组件封装的示例分析
      小编给大家分享一下JS组件之bootstrap treegrid组件封装的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!...
      99+
      2024-04-02
    • 深入浅析JAVA中封装的原理
      本篇文章为大家展示了深入浅析JAVA中封装的原理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一节 什么是JAVA中的封装面向对象的三大特性:封装、继承、多态。概念:将类的某些信息隐藏在类的内部,...
      99+
      2023-05-31
      java 封装 ava
    • js中A*寻路算法原理的示例分析
      这篇文章主要为大家展示了“js中A*寻路算法原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中A*寻路算法原理的示例分析”这篇文章吧。简易地图如...
      99+
      2024-04-02
    • js中单页hash路由原理的示例分析
      小编给大家分享一下js中单页hash路由原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是路由?通俗点说,就是不...
      99+
      2024-04-02
    • epoll封装reactor原理剖析示例详解
      目录reactor是什么?reactor模型三个重要组件与流程分析组件流程将epoll封装成reactor事件驱动封装每一个连接sockfd变成ntyevent封装epfd和ntye...
      99+
      2024-04-02
    • JS原型与继承操作的示例分析
      小编给大家分享一下JS原型与继承操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:<script>...
      99+
      2024-04-02
    • mysql游标的原理与用法实例分析
      本文实例讲述了mysql游标的原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是游标 创建游标 使用游标 首发日期:2018-04-18 什么是游标: 如果你前面看过mysql...
      99+
      2022-05-12
      mysql 游标
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作