CN105739967A - 移动应用中js异步调用native的方法 - Google Patents
移动应用中js异步调用native的方法 Download PDFInfo
- Publication number
- CN105739967A CN105739967A CN201610035285.1A CN201610035285A CN105739967A CN 105739967 A CN105739967 A CN 105739967A CN 201610035285 A CN201610035285 A CN 201610035285A CN 105739967 A CN105739967 A CN 105739967A
- Authority
- CN
- China
- Prior art keywords
- native
- back function
- call back
- call
- public
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明涉及移动应用开发。本发明针对现有技术中js异步调用native原生方法过程中,native端回调js的回调函数返回结果时,如果js端传递js回调函数代码给native,让webview去执行,导致native端代码复杂并难以复用,如果js端不传js回调函数代码到native端,native又不能调用js的匿名回调函数的问题,提供一种移动应用中js异步调用native的方法,js端缓存回调函数,并建立公共回调函数,所述公共回调函数包括缓存回调函数与其对应标识之间的映射关系;其次,js端将标示传给native端;然后,native端接收传入的标识,在执行完业务逻辑后回调公共回调函数;最后,公共回调函数根据传回的标识及映射关系,获得对应的缓存回调函数,native端调用该对应的缓存回调函数,完成回调。适用于混合开发模式。
Description
技术领域
本发明涉及移动应用开发,特别涉及移动应用开发中使用HTML5+Android/IOS原生功能(native功能)进行混合开发模式。
背景技术
目前,移动应用开发领域主要使用Android和IOS等技术,同一个app应用需要开发Android版本和IOS版本,但HTML5的出现,使得跨平台的开发技术开始盛行,HTML5+原生(native)的混合开发模式得到了广泛关注。而在使用混合开发模式时,js异步调用native是通过native回调js的回调函数来传递结果的,如图1所示,这就需要每个js函数提供明确的回调函数。而不同的js函数,其回调函数的功能千差万别,如果直接将回调函数传到native端,会导致native段代码变得非常复杂,难以复用和维护,而且大多数js框架及开发者习惯将回调函数定义为匿名函数,导致native端调用js回调函数的代码难以实现,如图2所示。这就需要一种机制来解决这类问题,以保证js即使使用匿名回调函数也能正确实现异步调用native方法。
发明内容
本发明所要解决的技术问题,就是提供一种移动应用中js异步调用native的方法以实现native端回调js回调函数的代码简单统一化。
本发明解决所述技术问题,采用的技术方案是,移动应用中js异步调用native的方法,包括以下步骤:
步骤1、js端缓存回调函数,并建立公共回调函数,所述公共回调函数包括缓存回调函数与其对应标识之间的映射关系;
步骤2、js端将标示传给native端;
步骤3、native端接收传入的标识,在执行完业务逻辑后回调公共回调函数;
步骤4、公共回调函数根据传回的标识及映射关系,获得对应的缓存回调函数,native端调用该对应的缓存回调函数,完成回调。
具体的,还包括以下步骤:
步骤5、完成回调后,js端根据所有标识清理掉对应的缓存回调函数。
进一步的,js端建立Map类型变量,用于缓存回调函数,还用于根据接收到的标识获得或清理标识对应的缓存回调函数。
具体的,所述步骤1中,回调函数至少为一个,并与标识一一对应。
具体的,所述步骤1中,公共回调函数的参数格式为json字符。
具体的,所述步骤4中,native端采用业务逻辑执行结果数据作为参数,调用对应的缓存回调函数,完成回调。
本发明的有益效果是:js端与native端约定在异步调用过程中,js的函数需要将其回调函数存放到map数据结构中,并将其对应的标识传给native的方法中,native方法接收传入的标示,在执行完业务逻辑后回调js的公共回调函数,并返回标示和执行的结果,该公共函数根据标示找到具体之前存放的回调函数,并以native返回的结果执行;
本发明中并不直接传给native其回调函数或其回调函数名称,而是根据某种机制,如:根据时间戳、模块名称、方法名称、成功回调或失败回调等因素生成标识值(key值),或使用uuid作为key值,生成一个key值,将回调函数按该key值存放到map数据结构中,并将该key值传给native方法;实现了让native端回调js回调函数的代码简单统一化。
附图说明
图1为本发明移动应用中js异步调用native的方法背景技术中js异步调用native功能的普通形式;
图2为本发明移动应用中js异步调用native的方法背景技术中js异步调用native功能时使用匿名回调函数导致native无法调到回调函数形式;
图3为本发明移动应用中js异步调用native的方法实施例中js异步并发调用native方法的解决方案图。
以下结合实施例的具体实施方式,对本发明的上述内容再作进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本发明的范围内。
具体实施方式
下面结合附图及实施例详细描述本发明的技术方案:
本发明针对现有技术中js异步调用native原生方法过程中,native端回调js的回调函数返回结果时,如果js端传递js回调函数代码给native,让webview去执行,导致native端代码复杂并难以复用,且不方便维护,如果js端不传js回调函数代码到native端,native又不能调用js的匿名回调函数的问题,提供一种移动应用中js异步调用native的方法,首先,js端缓存回调函数,并建立公共回调函数,所述公共回调函数包括缓存回调函数与其对应标识之间的映射关系;其次,js端将标示传给native端;然后,native端接收传入的标识,在执行完业务逻辑后回调公共回调函数;最后,公共回调函数根据传回的标识及映射关系,获得对应的缓存回调函数,native端调用该对应的缓存回调函数,完成回调。js端与native端约定在异步调用过程中,js的函数需要将其回调函数存放到map数据结构中,并将其对应的标识传给native的方法中,native方法接收传入的标示,在执行完业务逻辑后回调js的公共回调函数,并返回标示和执行的结果,该公共函数根据标示找到具体之前存放的回调函数,并以native返回的结果执行;本发明中并不直接传给native其回调函数或其回调函数名称,而是根据某种机制,如:根据时间戳、模块名称、方法名称、成功回调或失败回调等因素生成标识值(key值),或使用uuid作为key值,生成一个key值,将回调函数按该key值存放到map数据结构中,并将该key值传给native方法;实现了让native端回调js回调函数的代码简单统一化。
实施例
现有的js异步调用native原生方法中,native端回调js的回调函数返回结果时,如果js端传递js回调函数代码给native,让webview去执行,导致native端代码复杂并难以复用,且不方便维护。同时,如果js端不传js回调函数代码到native端,native又不能调用js的匿名回调函数。针对上述问题,本例提供一种新型的移动应用中js异步调用native的方法,其结构如图3所示,具体方法如下:
首先,用js端实现一个Map类型的数据结构,能够保存键值对,值可以是js的回调函数,键为回调函数的对应标识key。定义一个该Map类型的变量:callbackMap,用于缓存js端的回调函数,并能根据键来获得和删除相应的函数对象。回调函数至少为一个,并与标识一一对应可以利用key与序号进行表示,例如key1,key2,...,keyn。
可用如下示例代码实现上述方法:
然后,在js端定义如上所述的公共回调函数:commonCallback(),来接收native端的回调。公共回调函数为缓存回调函数与其对应标识之间的映射关系。commonCallback会根据传回的标示和序号,根据序号对应的标示从callbackMap中获得之前存放的具体的回调函数,并用native端传回的业务逻辑执行结果数据作为参数调用该回调函数,完成回调,然后根据所有的标示,清理掉缓存的回调函数。
其中,commonCallback的示例代码如下:
本例中,在具体的js函数中调用native方法时,并不直接传给native方法其回调函数或其回调函数名称,而是根据某种机制生成一个key值,如:根据时间戳、模块名称、方法名称、成功回调或失败回调等因素生成key值,或使用uuid作为key值等。将回调函数按该key值存放到callbackMap中,并将该key值传给native方法。
可用如下示例代码实现上述方法:
functionsomeFunction(){
varsomeKey="writeFile_s_"+newDate().getTime();//key的生成策略有具体应用开发者确定;
varotherKey="writeFile_f_"+newDate().getTime();
callbackMap.put(someKey,newFunction(){....});//回调函数实现形式和内容根据具体业务逻辑实现;
callbackMap.put(otherKey,newFunction(){....});//调用native方法(此处假设native端在webview中暴露给js的接口对象名为“Native”),将//someKey、otherKey传过去
window.Native.someNativeMethod(someKey,otherKey,otherParams);
}。
在native端,当具体的方法执行完业务逻辑后,只需调用调用js的公共回调函数:
commonCallback,将结果返回。示例代码如下:
综上所述,本发明实现了让native端回调js回调函数的代码简单统一化。
Claims (6)
1.移动应用中js异步调用native的方法,其特征在于,包括以下步骤:
步骤1、js端缓存回调函数,并建立公共回调函数,所述公共回调函数包括缓存回调函数与其对应标识之间的映射关系;
步骤2、js端将标示传给native端;
步骤3、native端接收传入的标识,在执行完业务逻辑后回调公共回调函数;
步骤4、公共回调函数根据传回的标识及映射关系,获得对应的缓存回调函数,native端调用该对应的缓存回调函数,完成回调。
2.根据权利要求1所述的移动应用中js异步调用native的方法,其特征在于,还包括以下步骤:
步骤5、完成回调后,js端根据所有标识清理掉对应的缓存回调函数。
3.根据权利要求2所述的移动应用中js异步调用native的方法,其特征在于,所述步骤1中,js端建立Map类型变量,用于缓存回调函数,还用于根据接收到的标识获得或清理标识对应的缓存回调函数。
4.根据权利要求1所述的移动应用中js异步调用native的方法,其特征在于,所述步骤1中,回调函数至少为一个,并与标识一一对应。
5.根据权利要求1所述的移动应用中js异步调用native的方法,其特征在于,所述步骤1中,公共回调函数的参数格式为json字符。
6.根据权利要求1所述的移动应用中js异步调用native的方法,其特征在于,所述步骤4中,native端采用业务逻辑执行结果数据作为参数,调用对应的缓存回调函数,完成回调。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610035285.1A CN105739967A (zh) | 2016-01-19 | 2016-01-19 | 移动应用中js异步调用native的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610035285.1A CN105739967A (zh) | 2016-01-19 | 2016-01-19 | 移动应用中js异步调用native的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105739967A true CN105739967A (zh) | 2016-07-06 |
Family
ID=56247465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610035285.1A Pending CN105739967A (zh) | 2016-01-19 | 2016-01-19 | 移动应用中js异步调用native的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105739967A (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106339229A (zh) * | 2016-08-31 | 2017-01-18 | 虎扑(上海)文化传播股份有限公司 | 一种针对移动平台的混合开发方法及系统 |
CN106713119A (zh) * | 2016-12-13 | 2017-05-24 | 四川长虹电器股份有限公司 | 一种跨平台移动端实时消息通知及展示方法 |
CN106874519A (zh) * | 2017-03-20 | 2017-06-20 | 百度在线网络技术(北京)有限公司 | 页面展现方法和装置 |
CN107133322A (zh) * | 2017-05-04 | 2017-09-05 | 四川长虹电器股份有限公司 | 移动应用中HTML与Native交互的公共数据通道的实现方法 |
CN107861713A (zh) * | 2017-07-25 | 2018-03-30 | 平安普惠企业管理有限公司 | 数据调用方法、装置及计算机可读存储介质 |
CN107870821A (zh) * | 2016-09-26 | 2018-04-03 | 平安科技(深圳)有限公司 | 应用程序的跨平台调用方法及系统 |
CN108874620A (zh) * | 2018-05-23 | 2018-11-23 | 北京五八信息技术有限公司 | 一种应用于app的事件监听方法、装置、设备及存储介质 |
CN108920218A (zh) * | 2018-05-23 | 2018-11-30 | 北京五八信息技术有限公司 | 一种反射调用方法、装置、终端及计算机可读存储介质 |
CN109032612A (zh) * | 2018-07-02 | 2018-12-18 | 平安科技(深圳)有限公司 | 混合型应用的接口调用方法、装置及计算机可读存储介质 |
CN109144601A (zh) * | 2018-06-22 | 2019-01-04 | 北京奇艺世纪科技有限公司 | 在ios应用内调用函数的方法及系统 |
CN111258683A (zh) * | 2020-01-19 | 2020-06-09 | 北京三快在线科技有限公司 | 检测方法、装置、计算机设备及存储介质 |
CN111443946A (zh) * | 2020-03-09 | 2020-07-24 | 深圳市伊欧乐科技有限公司 | Ios系统与页面的交互方法、系统、服务器和存储介质 |
CN112600786A (zh) * | 2020-11-12 | 2021-04-02 | 湖南快乐阳光互动娱乐传媒有限公司 | 数据交互方法及装置 |
CN112631701A (zh) * | 2020-12-22 | 2021-04-09 | 平安普惠企业管理有限公司 | 页面请求方法、装置、计算机设备和存储介质 |
CN113138766A (zh) * | 2021-04-25 | 2021-07-20 | 北京房江湖科技有限公司 | 代码块调用方法、装置及跨平台的代码块调用系统 |
CN114443019A (zh) * | 2020-11-03 | 2022-05-06 | 福建天泉教育科技有限公司 | 一种图形化编程多语言交互线程异步调用方法及终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120824A1 (en) * | 2001-05-03 | 2003-06-26 | Scott Shattuck | System supporting object-oriented constructs in ECMAScript |
CN101692206A (zh) * | 2009-08-28 | 2010-04-07 | 腾讯科技(深圳)有限公司 | 一种为静态回调函数添加动态参数的方法及相关实现 |
CN102654840A (zh) * | 2011-11-30 | 2012-09-05 | 天津书生投资有限公司 | 一种函数回调的方法和系统 |
CN103995752A (zh) * | 2014-06-16 | 2014-08-20 | 上海斐讯数据通信技术有限公司 | 模块间通知回调方法及模块交互结构 |
CN103995694A (zh) * | 2014-03-31 | 2014-08-20 | 中邮科通信技术股份有限公司 | 一种具备电信能力的移动客户端浏览器控件及其调用方法 |
-
2016
- 2016-01-19 CN CN201610035285.1A patent/CN105739967A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120824A1 (en) * | 2001-05-03 | 2003-06-26 | Scott Shattuck | System supporting object-oriented constructs in ECMAScript |
CN101692206A (zh) * | 2009-08-28 | 2010-04-07 | 腾讯科技(深圳)有限公司 | 一种为静态回调函数添加动态参数的方法及相关实现 |
CN102654840A (zh) * | 2011-11-30 | 2012-09-05 | 天津书生投资有限公司 | 一种函数回调的方法和系统 |
CN103995694A (zh) * | 2014-03-31 | 2014-08-20 | 中邮科通信技术股份有限公司 | 一种具备电信能力的移动客户端浏览器控件及其调用方法 |
CN103995752A (zh) * | 2014-06-16 | 2014-08-20 | 上海斐讯数据通信技术有限公司 | 模块间通知回调方法及模块交互结构 |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106339229A (zh) * | 2016-08-31 | 2017-01-18 | 虎扑(上海)文化传播股份有限公司 | 一种针对移动平台的混合开发方法及系统 |
CN107870821A (zh) * | 2016-09-26 | 2018-04-03 | 平安科技(深圳)有限公司 | 应用程序的跨平台调用方法及系统 |
CN107870821B (zh) * | 2016-09-26 | 2021-03-16 | 平安科技(深圳)有限公司 | 应用程序的跨平台调用方法及系统 |
CN106713119B (zh) * | 2016-12-13 | 2019-11-05 | 四川长虹电器股份有限公司 | 一种跨平台移动端实时消息通知及展示方法 |
CN106713119A (zh) * | 2016-12-13 | 2017-05-24 | 四川长虹电器股份有限公司 | 一种跨平台移动端实时消息通知及展示方法 |
CN106874519A (zh) * | 2017-03-20 | 2017-06-20 | 百度在线网络技术(北京)有限公司 | 页面展现方法和装置 |
CN107133322A (zh) * | 2017-05-04 | 2017-09-05 | 四川长虹电器股份有限公司 | 移动应用中HTML与Native交互的公共数据通道的实现方法 |
CN107861713A (zh) * | 2017-07-25 | 2018-03-30 | 平安普惠企业管理有限公司 | 数据调用方法、装置及计算机可读存储介质 |
CN108874620A (zh) * | 2018-05-23 | 2018-11-23 | 北京五八信息技术有限公司 | 一种应用于app的事件监听方法、装置、设备及存储介质 |
CN108920218A (zh) * | 2018-05-23 | 2018-11-30 | 北京五八信息技术有限公司 | 一种反射调用方法、装置、终端及计算机可读存储介质 |
CN109144601A (zh) * | 2018-06-22 | 2019-01-04 | 北京奇艺世纪科技有限公司 | 在ios应用内调用函数的方法及系统 |
CN109032612B (zh) * | 2018-07-02 | 2022-01-28 | 平安科技(深圳)有限公司 | 混合型应用的接口调用方法、装置及计算机可读存储介质 |
CN109032612A (zh) * | 2018-07-02 | 2018-12-18 | 平安科技(深圳)有限公司 | 混合型应用的接口调用方法、装置及计算机可读存储介质 |
CN111258683A (zh) * | 2020-01-19 | 2020-06-09 | 北京三快在线科技有限公司 | 检测方法、装置、计算机设备及存储介质 |
CN111443946A (zh) * | 2020-03-09 | 2020-07-24 | 深圳市伊欧乐科技有限公司 | Ios系统与页面的交互方法、系统、服务器和存储介质 |
CN111443946B (zh) * | 2020-03-09 | 2024-03-15 | 深圳市伊欧乐科技有限公司 | Ios系统与页面的交互方法、系统、服务器和存储介质 |
CN114443019A (zh) * | 2020-11-03 | 2022-05-06 | 福建天泉教育科技有限公司 | 一种图形化编程多语言交互线程异步调用方法及终端 |
CN112600786A (zh) * | 2020-11-12 | 2021-04-02 | 湖南快乐阳光互动娱乐传媒有限公司 | 数据交互方法及装置 |
CN112631701A (zh) * | 2020-12-22 | 2021-04-09 | 平安普惠企业管理有限公司 | 页面请求方法、装置、计算机设备和存储介质 |
CN113138766A (zh) * | 2021-04-25 | 2021-07-20 | 北京房江湖科技有限公司 | 代码块调用方法、装置及跨平台的代码块调用系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105739967A (zh) | 移动应用中js异步调用native的方法 | |
US10795666B1 (en) | Techniques for web application updates | |
US11533220B2 (en) | Network-assisted consensus protocol | |
US20180278725A1 (en) | Converting a single-tenant application for multi-tenant use | |
EP4102351A1 (en) | Secure network access device | |
CN112328927B (zh) | 文档处理方法、装置、可读介质及电子设备 | |
CN107018189A (zh) | 迁移应用数据以及接收应用数据的方法及装置 | |
US20140188982A1 (en) | Virtual Desktop Infrastructure (VDI) Login Acceleration | |
US20220400124A1 (en) | Network devices assisted by machine learning | |
US20170279871A1 (en) | Inter-regional file sharing method and system | |
WO2019136713A1 (zh) | 数据传输方法及装置 | |
US20220138220A1 (en) | Dedicated replication channels for replicating records between regions | |
CN109460389A (zh) | 一种基于openresty的日志记录方法 | |
CN103491120A (zh) | 一种基于云存储的转移用户信息的系统和方法 | |
CN104065613B (zh) | 一种应用的离线操作数据的同步方法、系统及装置 | |
CN111373377B (zh) | 用于请求者和提供者之间的错误处理的方法和系统 | |
CN110688233B (zh) | 基于rxjs的客户端ipc通讯方法、存储介质、设备及系统 | |
CN105636121A (zh) | 一种客户端登录服务器同步数据的方法及系统 | |
US11675584B1 (en) | Visualizing dependent relationships in computer program analysis trace elements | |
CN111343220A (zh) | 转发器、分布式文件传输方法、系统、介质及电子设备 | |
CN111368557B (zh) | 视频内容的翻译方法、装置、设备及计算机可读介质 | |
CN110209737B (zh) | 数据上报方法、平行链创建方法、设备和存储介质 | |
US8185911B2 (en) | System and method for simplification of data structure in wireless communications | |
CN101883130B (zh) | 页面流会话信息的保存方法及装置 | |
CN104902022B (zh) | 一种分布式文件获取方法和分布式文件获取系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160706 |
|
RJ01 | Rejection of invention patent application after publication |