CN104572114B - 一种绑定装置、应用更新装置及方法 - Google Patents
一种绑定装置、应用更新装置及方法 Download PDFInfo
- Publication number
- CN104572114B CN104572114B CN201510034204.1A CN201510034204A CN104572114B CN 104572114 B CN104572114 B CN 104572114B CN 201510034204 A CN201510034204 A CN 201510034204A CN 104572114 B CN104572114 B CN 104572114B
- Authority
- CN
- China
- Prior art keywords
- extension element
- module
- unique identifier
- extension
- parameter
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种绑定装置,其驻留在移动终端内,所述装置包括:第一扩展模块,其基于所述第一扩展组件框架创建第一扩展组件;第二扩展模块,其基于所述第二扩展组件框架创建第二扩展组件;第一交互模块,其调用JS引擎,并将第一扩展组件的参数以及要创建与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎;JS引擎使第一交互模块与第二交互模块进行交互,第二交互模块,其用原生开发语言解析所述JS引擎所传递的第一扩展组件的参数,并调用第二扩展模块,所述第二扩展模块基于所述第二交互模块解析的第一扩展组件的参数创建所述第二扩展组件。另外,本发明还提供一种使用绑定装置的应用更新装置、应用更新方法以及应用。
Description
技术领域
本发明涉及计算机应用及互联网技术领域,尤其涉及一种绑定装置、应用更新装置及方法、以及应用。
背景技术
随着计算机网络技术和移动终端的不断发展,应用已经成为移动终端的一个重要组成部分。不同的移动终端可能采用不同的操作***,例如,目前智能手机就存在IOS、Android、WPS8等不同操作***。
对于同一个应用,在开发时,为了使其在不同的移动终端下都可以使用,往往需要开发不同的版本,使其在不同的操作***下都能够显示。这无疑会增加应用开发者的工作量和应用开发时间、以及应用开发商的开发成本。
另外,应用在正式推出后,有可能会有一些更新,以对原始版本进行一些改进,优化其性能或者扩展其功能。如果每次更新都要用户下载新版本,一方面,用户会觉得麻烦,另一方面,对应用客户端所做的一些逻辑方面的修改,通过平台审核时会经历一、两个星期,而且还存在审核不被通过的可能性,因此会导致部分用户群体流失。还有,频繁的UI设计需求更改,应用版本迭代次数与个数的增加也会带来管理上的负担。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的绑定装置、应用更新装置及方法、使用所述应用更新装置的应用。
根据本发明的一个方面,提供了一种绑定装置,其驻留在移动终端内,所述装置包括:第一扩展模块,其具有基于原生开发语言的软件开发包SDK的组件框架用JS脚本语言创建的包括标识符选项的第一扩展组件框架,且基于所述第一扩展组件框架创建第一扩展组件,每个第一扩展组件的参数都包括唯一标识符;第二扩展模块,其具有基于原生开发语言的SDK的组件框架用原生开发语言创建的包含标识符选项的第二扩展组件框架,且基于所述第二扩展组件框架创建第二扩展组件;第一交互模块,其调用JS引擎,并将第一扩展组件的参数以及要创建与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎,所述参数包括唯一标识符;JS引擎,其将第一扩展组件的参数以及要创建第二扩展组件的指令传递至第二交互模块;第二交互模块,其用原生开发语言解析所述JS引擎所传递的第一扩展组件的参数,并调用第二扩展模块;其中,所述第二扩展模块基于所述第二交互模块解析的第一扩展组件的参数创建所述第二扩展组件,使得所述第二扩展组件具有与所述第一扩展组件相同的唯一标识符。
可选地,根据本发明的一种实施例,所述绑定装置还包括:第一存储器,其适于存储所述第一扩展组件;以及第二存储器,其适于存储所述第二扩展组件。其中,所述第一交互模块还适于管理所述第一扩展组件,所述管理包括从所述第一存储器中查找、删除、修改所述第一扩展组件;所述第二交互模块还适于管理所述第二扩展组件,所述管理包括从所述第二存储器中查找、删除、修改所述第二扩展组件。
可选地,根据本发明的另一方面,提供一种应用更新装置,其驻留于移动终端内,所述装置包括:逻辑更新模块,其适于从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码,所述扩展组件包括扩展组件的唯一标识符,所述扩展组件的更新逻辑适用于在所述移动终端的运行环境下运行;前面所述的绑定装置,其根据所述扩展组件的更新逻辑的运行使JS脚本语言的第一扩展组件与原生开发语言的第二扩展组件绑定,所述绑定包括具有相同的唯一标识符;以及原生更新模块,其适于根据所述绑定装置的第二扩展模块所创建的第二扩展组件而更新所述应用的软件开发包SDK中的对应的所述扩展组件。
可选地,根据本发明的一种实施例,所述逻辑更新模块从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码包含适用于不同运行环境的多个更新逻辑版本。所述应用更新装置还包括:适配器,其适于检测所述移动终端的运行环境,并从所述更新逻辑的JS代码中选择适于所述运行环境的更新逻辑版本,将其分配给所述应用更新装置中的绑定装置。
根据本发明的又一方面,提供一种应用,其包括前面所述的应用更新装置。
根据本发明的再一方面,提供一种应用更新方法,其驻留于移动终端内,所述方法包括:从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码,所述扩展组件的参数包括扩展组件的唯一标识符,所述扩展组件的更新逻辑适用于在所述移动终端的运行环境下运行;基于第一扩展组件框架创建包括唯一标识符的第一扩展组件,其中所述第一扩展组件框架基于原生开发语言的软件开发包SDK的组件框架用JS脚本语言创建且包括标识符选项;通过JS引擎实现JS脚本语言与原生开发语言之间的交互,所述交互包括传递第一扩展组件的参数以及调用原生开发语言中对应创建第二扩展组件的模块;解析通过JS引擎交互的参数;基于所述解析的结果以及第二扩展组件框架创建第二扩展组件,所述第二扩展组件框架基于原生开发语言的SDK的组件框架用原生开发语言创建且包含标识符选项;根据所述第二扩展组件更新所述应用的软件开发包SDK中的对应的扩展组件。
利用本发明,可以实现同一应用在具有不同操作***的移动终端上的更新与显示,减少应用经平台审核而进行更新的次数。另外,还可以提高应用的开发灵活度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的附图标记表示相同的部件。在附图中:
图1示出了根据本发明的一种实施方式的网络***的示意图;
图2示出了根据本发明的一种实施方式的绑定装置的结构示意图;
图3示出了根据本发明的一种实施方式的应用更新装置的结构示意图;
图4示出了根据本发明的另一种实施方式的应用更新装置的结构示意图;
图5示出了根据本发明的一种实施方式的应用更新方法的流程图;
图6示出了根据本发明的一种实施方式的用于修改扩展组件的应用更新方法的流程图;
图7示出了根据本发明的一种实施方式的用于删除扩展组件的应用更新方法的流程图;以及
图8示出了根据本发明的另一种实施方式的应用更新方法的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明主要是使应用(例如网络游戏)能够在使用不同操作***的移动终端下自动地进行更新并显示,从而实现应用的更新以及同一应用的跨端更新。这里所述的跨端是指跨越不同的操作***,例如跨越IOS、Android、WP8等不同的操作***。
图1示出了根据本发明的一种实施方式的网络***100的示意图。如图1所示,本发明的网络***100包括多个客户端(图1中只示出了客户端1、客户端2、和客户端3)、以及为这些客户端提供网络信息(例如网页、应用等)的服务器。各个客户端与服务器之间通过互联网相互连接而进行通信。
在本发明中,客户端可以是本领域中任何可以呈现从服务器140获取的网络信息(例如网页、各种应用(包括网络游戏)以及相关联的文件(例如JS(Javascript)文件和多媒体文件等))的设备。客户端中通常运行现代的操作***,利用操作***来管理客户端中的硬件资源。客户端上通常可以运行有网页浏览器,用于呈现从服务器获取的网页以及相关联的数据(例如网页中引用的图像,音频和视频等),也可以运行多种应用(包括网络游戏等)。
服务器可以应客户端的请求而将所请求的网络信息返回客户端,也可以主动将一些网络信息主动推送至客户端。网络信息可以为网页页面以及在网页页面中引用的各种文件,也可以为各种应用中的各种文件,这些文件例如可以是图像文件、音频和/或视频文件等多媒体文件,以及诸如JS文件之类的相关文件。实践中,在客户端110从服务器140请求了网络信息之后,客户端110对服务器140传送给其的网络信息进行解析或运行,然后展现其结果。
为了方便应用在公布或上线后比较容易进行更新,不受平台审核的影响,在客户端侧可以采用本发明的绑定装置、应用更新装置、和跨端显示控制装置。
图2示出了根据本发明的绑定装置的结构示意图。如图2所示,本发明的绑定装置200包括第一扩展模块210、第一交互模块220、JS引擎270、第二交互模块230、以及第二扩展模块240。
第一扩展模块210具有基于原生开发语言的软件开发包SDK的组件框架、用JS脚本语言创建的、包括标识符选项的第一扩展组件框架,第一扩展模块210基于所述第一扩展组件框架创建第一扩展组件,这时所创建的第一扩展组件的参数除了包括第一扩展组件的属性参数等之外,还包括与该第一扩展组件对应的唯一标识符jsTag。所述第一扩展组件的参数通常通过从服务器下载的JS语言的扩展组件更新逻辑中获取。在不同的移动终端操作***下使用的软件开发包SDK是使用不同的原生开发语言开发的,例如在IOS操作***下使用的SDK是用Objective-C语言开发的;在Android操作***下使用的SDK是用Java语言开发的;在WP8操作***下使用的SDK是用C#语言开发的。每个应用在不同操作***下的SDK中都包含有多个组件框架,例如按钮组件框架、窗口组件框架、表格组件框架等,但相同的组件框架在不同的操作***下的设置不同。当移动终端的运行环境是IOS的操作***时,第一扩展模块210具有与IOS的SDK中包含的多个组件框架一样的、用JS脚本语言开发的第一扩展组件框架,从而第一扩展模块210可以创建具有所述第一扩展组件框架的第一扩展组件,由于所述第一扩展组件框架具有标识符选项,所以所创建的第一扩展组件会具有唯一标识符。当然,第一扩展组件框架还可以包括其它选项,这里并不对此进行限制。所述第一扩展组件框架可以是一些应用程序接口API,即一些预先定义的函数,在所述函数中包含标识符选项,例如function(x,y,w,h,tag)。在本发明中,每一第一扩展组件都具有一个唯一标识符。所述唯一标识符可以为字符串、数字等。
第二扩展模块240具有基于原生开发语言的SDK的组件框架、用原生开发语言创建的、包含标识符选项的第二扩展组件框架。由于所述第二扩展组件框架具有标识符这一选项,所以第二扩展模块240所创建的第二扩展组件也包含标识符这一选项。当然,第一扩展组件框架还可以包括其它选项,这里并不对此进行限制。所述第一扩展组件框架可以是一些应用程序接口API,即一些预先定义的函数,在所述函数中包含标识符选项。
第一交互模块220调用JS引擎270,并将第一扩展组件的参数及要创建第二扩展组件的指令交付给所述JS引擎。JS引擎将所述第一扩展组件的参数以及要创建与所述第一扩展组件对应的第二扩展组件的指令传递至第二交互模块。具体地,第一交互模块220可以用一个JS文件来实现,将第一扩展组件的参数及要创建第二扩展组件的指令交付给JS引擎270。JS引擎270可以实现指令的相互调用以及数据的相互传递,其可以根据需要选择现有的任何一款JS引擎,例如Spidermonkey、V8等,也可以使用浏览器中的引擎,具体地,在浏览器启动之后,将浏览器的功能隐藏,只启动JS引擎。例如,在IOS操作***下,当第一扩展模块210用JS脚本语言创建了一第一扩展组件时,需要通过JS引擎将创建扩展组件这一指令传递至Objective-C语言侧相应的模块,这时,第一交互模块220可以用一个js_binding_core.js文件来实现,在js_binding_core.js文件中包含向JS引擎270交付第一扩展组件的参数及调用创建与所述第一扩展组件对应的第二扩展组件的模块的模块。JS引擎270将所述第一扩展组件的参数传递给Objective-C语言侧相应的模块。第一交互模块220交付给JS引擎的第一扩展组件的参数,可以包括第一扩展组件的属性参数和唯一标识符,也可以只包括第一扩展组件的唯一标识符。当第一交互模块220交付给JS引擎的第一扩展组件的参数只包括第一扩展组件的唯一标识符时,第一扩展组件的属性参数取缺省设置值。
第二交互模块230解析第一交互模块220通过JS引擎270传递的第一扩展组件的参数并调用第二扩展模块240。例如第二交互模块230解析出第一交互模块220通过JS引擎传递的第一扩展组件的属性参数及唯一标识符jsTag。例如第二交互模块230可以通过js_binding_core.m文件来实现,在js_binding_core.m文件中包含解析第一扩展组件的参数的模块以及基于所解析的第一扩展组件的参数调用第二扩展模块240创建第二扩展组件的模块。
第二扩展模块240在被第二交互模块230调用时,基于所述第二交互模块解析的第一扩展组件的参数创建具有所述第二扩展组件框架的第二扩展组件,使第二扩展组件具有与第一扩展组件相同的参数,即具有相同的属性参数和唯一标识符或者具有相同的唯一标识符,又由于第二扩展模块240所创建的第二扩展组件与第一扩展模块210所创建的第一扩展组件都是基于IOSSDK中的扩展组件框架而创建的,所以在JS脚本语言侧及原生开发语言侧分别创建了一一对应的第一扩展组件及第二扩展组件,从而实现第一扩展组件与第二扩展组件的绑定,而通过第二扩展组件可以在原生开发语言中的SDK中创建新的扩展组件。
通过本发明上述的绑定装置200可以实现从JS脚本语言的第一扩展组件与对应的原生开发语言的第二扩展组件的绑定,被绑定的第一扩展组件与第二扩展组件具有相同的唯一标识符jsTag。这样,当JS脚本语言侧运行一JS逻辑时,可以通过所述绑定装置200将所述JS逻辑从JS脚本语言侧传递至原生开发语言侧,实现在原生开发语言中的SDK中新的扩展组件的创建。通常创建一个按钮组件、窗口组件、表格组件等、设置参数、调用API、为组件命名等都是从JS脚本语言侧向原生开发语言侧进行绑定来实现。
可选地,绑定装置200还可以包括第一存储器250和第二存储器260。第一存储器250适于存储所述第一扩展组件。第二存储器260适于存储所述第二扩展组件。例如,第一存储器250和第二存储器260分别将第一扩展组件和第二扩展组件存储在哈希表中或者数据库中,以方便进行管理。第一存储器250和第二存储器260可以为缓存器、本地内存、或专门的存储设备。
第一扩展模块210在创建了第一扩展组件后,会将所创建的第一扩展组件放到第一存储器250中存储。另外,第一交互模块220可以根据第一扩展组件的唯一标识符对所述第一扩展组件进行管理,所述管理包括通过唯一标识符从所述第一存储器250中查找、删除、修改所创建的第一扩展组件。
第二扩展模块240在创建了第二扩展组件后,会将所创建的第二扩展组件放到第二存储器260中存储。可选地,第二扩展模块240在创建了第二扩展组件后将所述第二扩展组件返回给第二交互模块230,由第二交互模块230将所述第二扩展组件放到第二存储器260中存储。另外,第二交互模块230可以根据第二扩展组件的唯一标识符对所述第二扩展组件进行管理,所述管理包括通过唯一标识符从所述第二存储器260中查找、删除、修改所创建的第二扩展组件。
本发明的绑定装置200通过为每一扩展组件中附加一个唯一标识符jsTag,使得第一交互模块220与第二交互模块230真实地绑定在一起,且使得原生开发语言的第二扩展组件与JS脚本语言创建的第一扩展组件因具有相同唯一标识符也对应地绑定在一起,从而能够实现JS脚本语言逻辑对原生开发语言逻辑的调用、及数据在JS脚本语言与原生开发语言之间的传递。因此,通过唯一标识符jsTag可以标识JS脚本语言的哪个第一扩展组件与原生开发语言的哪个第二扩展组件绑定了、JS脚本语言的第一扩展组件与对应的原生开发语言的第二扩展组件是否已绑定上。
另外,本发明的绑定装置200不限于创建扩展组件,而且还可以修改、删除所创建的扩展组件。下面分别进行说明。
当要修改已创建的第一扩展组件时,从服务器侧获取所述第一扩展组件的参数,所述参数包括新属性参数及唯一标识符。第一扩展模块210基于所述第一扩展组件的参数修改所述第一扩展组件,例如调用第一扩展组件的API,修改所述第一扩展组件的新属性参数。第一交互模块220将所述第一扩展组件的参数以及修改与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎270。JS引擎270将所述第一扩展组件的参数以及要调用的修改与所述第一扩展组件对应的第二扩展组件的指令传递给第二交互模块230。第二交互模块230解析所述第一扩展组件的参数,且调用第二扩展模块240中的第二扩展组件。第二扩展模块240基于第二交互模块230解析到的所述第一扩展组件的新属性参数修改所述第二扩展组件。
当要删除第一扩展组件时,从服务器侧获取所述第一扩展组件的参数,所述参数包括要删除的第一扩展组件的唯一标识符。第一扩展模块210基于第一扩展组件的唯一标识符删除所创建的第一扩展组件,并调用第一交互模块220。第一交互模块220将所述第一扩展组件的的唯一标识符以及删除与所述第一扩展组件对应的第二扩展组件的指令交付给JS引擎270。JS引擎将所述第一扩展组件的唯一标识符以及要调用的删除与所述第一扩展组件对应的第二扩展组件的指令传递给第二交互模块230。第二交互模块230解析所述第一扩展组件的唯一标识符,且调用第二扩展模块240。第二扩展模块240基于第二交互模块所传送的指令删除所述第二扩展组件,并传递删除完成消息给第二交互模块230。第二交互模块230在获得删除完成消息时将所述第二扩展组件从所述第二存储器260中删除。
可选地,通过上述的绑定装置200还可以实现从原生开发语言的第二扩展组件与对应的JS脚本语言的第一扩展组件的绑定。具体地,当所述第二扩展模块所创建的第二扩展组件被事件所触发时,第二交互模块230调用所述JS引擎270并将所述第二扩展组件的唯一标识符以及要调用所述事件的指令交付给所述JS引擎270。JS引擎270将第二扩展组件的唯一标识符以及要调用所述事件的指令传递至第一交互模块210。第一交互模块210解析第二交互模块230所传递的唯一标识符,然后从第一存储器250中查找与所述唯一标识符对应的第一扩展组件,然后将所述事件传递至第一扩展模块210中的第一扩展组件,从而实现将所触发的事件从原生开发语言侧传递至JS脚本语言侧,实现从原生开发语言的第二扩展组件向JS脚本语言的第一扩展组件的绑定。例如,监听事件、键盘文件输入、反馈事件等,是从原生开发语言侧向JS脚本语言侧进行绑定。
在本发明的上述绑定装置中,在第一扩展组件框架以及第二扩展组件框架中分别增加了一个标识符选项,但本发明并不限于此,在第一扩展组件框架以及第二扩展组件框架中还可以增加其它参数选项,增加的选项的项数也并不限定,可以增加一个,也可以增加多个。
图3示出了根据本发明的一种实施方式的应用更新装置300的结构示意图。如图3所示,其示出了使用本发明的绑定装置200的应用更新装置300。本发明的应用更新装置300包括逻辑更新模块310、绑定装置200、以及原生更新模块320。
在应用已经上线的情况下,如果对其某一项性能进行优化,可以在服务器侧将该性能的更新逻辑写成JS代码。当应用在客户端侧启动时,逻辑更新模块310则从服务器侧下载所述应用的更新逻辑JS代码,所述更新逻辑JS代码适用于在所述移动终端的运行环境下运行。当更新扩展组件时,所述更新逻辑中包含所述扩展组件的参数,所述参数包括属性参数及唯一标识符。其中每一扩展组件只具有一唯一标识符,所述唯一标识符可以是字符串、数字等。所述下载可以是服务器侧主动将第一JS代码发送给客户端,也可以是所述客户端查询服务器侧是否有更新的逻辑代码,如果有,则请求下载。
例如,逻辑更新模块310从服务器侧下载关于在一个应用中创建一个新的按钮的JS逻辑代码,所述JS逻辑代码适用于使用所述应用的移动终端的运行环境,例如,从服务器侧下载适用于在IOS运行环境下创建按钮JSUIButton的代码如下:
var testUIButton=new JSUIButton();
绑定装置200根据所述扩展组件的更新逻辑使JS脚本语言的第一扩展组件与原生开发语言的第二扩展组件绑定。
具体地,逻辑更新模块310运行所下载的JS逻辑代码,根据所述JS逻辑代码的运行而调用绑定装置200中的第一扩展模块210。第一扩展模块210基于逻辑更新模块310获得的需要创建的按钮的唯一标识符,用JS脚本语言创建关于该按钮的第一扩展组件,即赋予创建按钮的API一所述唯一标识符。其中,从服务器侧下载的JS逻辑代码中可以包括要创建的按钮的属性参数,也可以不包括要创建的按钮的属性参数。当JS逻辑代码中不包括要创建的按钮的属性参数时,则第一扩展模块210在创建按钮的第一扩展组件时,要创建的按钮的第一扩展组件的属性参数采用缺省设置的属性参数。当JS逻辑代码包括要创建的按钮的第一扩展组件的属性参数时,则第一扩展模块210在创建按钮时,将要创建的按钮的第一扩展组件的属性参数赋予给按钮的第一扩展组件。这同样适用于其它扩展组件的创建。第一扩展组件创建完成后,第一扩展模块310会调用第一交互模块220。
下面给出第一扩展模块210根据逻辑更新模块210从服务器侧下载的JS逻辑而创建一个在IOS操作***的运行环境下使用的按钮的第一扩展组件JSUIButton的实现代码:
第一扩展模块210具有创建在IOS运行环境下使用的按钮的框架,即创建按钮的API为function(x,y,w,h,_jsTag),其中包含标识符选项jsTag。当逻辑更新模块310中更新逻辑为创建一个按钮时,第一扩展模块210调用其中创建按钮的函数function(x,y,w,h,_jsTag)(即API),即第一扩展组件框架,并根据创建按钮的更新逻辑为该按钮的第一扩展组件框架中的标识符选项jsTag赋值,即赋予jsTag为AppDelegate.testUIButton,从而得到唯一标识符为AppDelegate.testUIButton的按钮的第一扩展组件。所创建的按钮的第一扩展组件可以被放入第一存储器250中进行存储。然后第一扩展模块210调用第一交互模块220中交互创建按钮的第一扩展组件的参数的功能,即调用JS_binding_core.js文件中的binding_uibutton_initWithFrame模块。
第一交互模块220将所述第一扩展组件的参数以及要创建与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎270。JS引擎270将所述第一扩展组件的唯一标识符以及要创建与所述第一扩展组件对应的第二扩展组件的指令传递给第二交互模块230。例如,当第一扩展组件为所创建的按钮的第一扩展组件时,第一交互模块220将所创建的按钮的第一扩展组件的参数及以及要创建与所述第一扩展组件对应的第二扩展组件的指令将付给JS引擎270,JS引擎270将它们传递至第二交互模块230。在第一扩展组件的属性参数采用缺省设置参数时,则只传递第一扩展组件的唯一标识符。下面给出第一交互模块220通过JS引擎270调用第二交互模块230中用原生开发语言创建按钮的功能并传递所创建的按钮的第一扩展组件的参数的实现代码:
在上述代码中,第一交互模块220将按钮的第一扩展组件的属性参数x,y,w,h(其中x,y表示按钮的坐标、w表示按钮的宽度,h表示按钮的高度)和唯一标识符jsTag交付于Cordova,并告知其要调用第二交互模块230中的“js_binding_uibutton_initWithFrame”模块来创建与按钮的第一扩展组件对应的第二扩展组件。其中,通过使用Cordova封装IOSSDK组件中的UIWEBVIEW,利用UIWEBVIEW内提供的JS引擎实现JS脚本语言与IOS的Objective-C语言之间的交互,将按钮的第一扩展组件的属性参数x,y,w,h和唯一标识符jsTag传递至第二交互模块230中的“js_binding_uibutton_initWithFrame”模块。UIWEBVIEW是IOS SDK中常用的一个组件,是内置的浏览器组件。这里主要是使用UIWEBVIEW中的JS引擎的功能。
第二交互模块230对JS引擎270传递的所述第一扩展组件的参数进行解析,获得第一扩展组件的参数并调用第二扩展模块240。例如,当第一扩展组件为创建的按钮的第一扩展组件时,第二交互模块230对该按钮的第一扩展组件的参数进行解析,获得该按钮的第一扩展组件的属性参数和唯一标识符,并调用第二扩展模块240中的创建按钮的第二扩展组件的功能。
第二扩展模块240将所述第一扩展组件的参数赋予给与所述第一扩展组件对应的第二扩展组件。第二扩展组件具有第二扩展组件框架、用原生开发语言创建、且与用JS脚本语言创建的第一扩展组件一一对应,其中所述第二扩展组件框架可以用一些应用程序接口API来实现。例如,第二交互模块230调用创建按钮的第二扩展组件的API,将新创建的按钮的第一扩展组件的属性参数和唯一标识符赋予给该对应的按钮的第二扩展组件的API,从而获得与新创建的按钮的第一扩展组件完全对应的、但是使用原生开发语言开发的按钮的第二扩展组件。如前面所述,第一扩展组件所具有的第一扩展组件框架与第二扩展组件所具有的第二扩展组件框架都是基于原生开发语言的SDK中所具有的框架建立的,所以第一扩展模块具有的第一扩展组件框架与第二扩展模块具有的第二扩展组件框架一一对应,第一扩展模块210创建了一个第一扩展组件之后,第二扩展模块220就可以创建一个一一对应的第二扩展组件。
下面以创建按钮的扩展组件为例,给出第二交互模块230对JS引擎270传递的数据进行解析以及调用第二扩展模块240创建第二扩展组件的实现代码的一个实例:
在上述代码中,第二交互模块230先解析JS引擎270传递的属性参数x,y,w,h和唯一标识符jsTag。然后调用第二扩展模块240(ExtUIButton.m模块)中的创建按钮的功能并依据所述属性参数和唯一标识符创建按钮的第二扩展组件ExtUIButton,例如,可以通过如下代码来实现:
其中,对所述按钮的第二扩展组件ExtUIButton的唯一标识符赋予了与第一扩展组件一样的唯一标识符jsTag。
在第二扩展模块240创建了按钮的第二扩展组件ExtUIButton之后,将其返回至第二交互模块240。第二交互模块230将新创建的按钮的第二扩展组件ExtUIButton放入到第二存储器260中进行存储并对所述第二扩展组件ExtUIButton进行管理。
由此,可以将逻辑更新模块310需要更新的内容通过绑定装置200从JS脚本语言一侧传递至原生开发语言一侧。由于第二扩展模块240所具有的第二扩展组件框架是基于原生开发语言的SDK中的框架进行创建的,因此原生更新模块320可以基于第二扩展模块240创建的第二扩展组件在原生开发语言的SDK中创建对应的扩展组件。例如,第二扩展模块240在创建了按钮的第二扩展组件ExtUIButton之后,可以直接调用IOS SDK中的创建按钮的框架(即API),在IOS SDK中创建按钮UIButton,例如如上面代码中所示。
逻辑更新模块310从服务器下载的JS逻辑代码中一定会包含要创建的扩展组件的唯一标识符,因为每一扩展组件必须具有唯一标识符。而要创建的扩展组件的的属性参数如果没有设定,则可以采用缺省属性参数。在上述创建按钮的例子中,在创建按钮时,如果逻辑更新模块310从服务器下载的JS逻辑代码中只包含唯一标识符这一参数,即在创建按钮的JS逻辑代码中没有包含要创建的按钮的坐标x,y,宽度w,高度h,则这些属性参数可以取缺省值。
上面描述的本发明的应用更新装置300主要是以创建扩展组件为例说明从JS逻辑代码侧实现对原生开发语言的SDK侧的更新。但本发明并不限于此。本发明的应用更新装置300还可以用于对所创建的扩展组件的删除及修改。
下面举例说明对所创建的扩展组件进行修改的情形。例如,逻辑更新模块310从服务器侧下载对按钮进行修改的如下JS逻辑代码:testUIButton.initWithFrame('240','420','91','35','AppDelegate.testUIButton')。
上述JS逻辑代码包括要修改的按钮的属性参数及唯一标识符jsTag,具体地包括:表明按钮的位置的坐标x=240,y=420,按钮的宽度w=91,按钮的高度h=35,该按钮组件的唯一标识符jsTag为AppDelegate.testUIButton。
逻辑更新模块310运行上述JS逻辑代码并基于所述唯一标识符jsTag调用第一扩展模块210中所创建的按钮的第一扩展组件的API,修改该按钮的第一扩展组件的属性参数x,y,w,h。然后,第一扩展模块210调用第一交互模块220,第一交互模块220调用JS引擎270将所述第一扩展组件的新属性参数x,y,w,h和唯一标识符jsTag以及调用修改与所述按钮的第一扩展组件对应的第二扩展组件的指令交付给JS引擎270。JS引擎270可以使用前面所述的用Cordova包装的UIwebview中的JS引擎,将所述第一扩展组件的新属性参数x,y,w,h和唯一标识符jsTag传递至第二交互模块230。第二交互模块230解析第一交互模块220传递的新属性参数x,y,w,h和唯一标识符jsTag,并从第二存储器260中查找具有唯一标识符jsTag的第二扩展组件,然后调用第二扩展模块240,第二扩展模块240赋予具有所述唯一标识符jsTag的按钮的第二扩展组件以新属性参数x,y,w,h。第二扩展模块240进一步调用IOSSDK中的与所述按钮的第二扩展组件对应的按钮组件并对其属性参数进行修改,从而实现对IOS SDK中所创建的按钮的修改。
另外,当逻辑更新模块310从服务器侧下载了删除所创建的按钮的JS逻辑代码时,在所述JS逻辑代码中包含有要删除的按钮的唯一标识符jsTag。逻辑更新模块310运行所述JS逻辑代码,并调用绑定装置200中的第一扩展模块210,删除具有唯一标识符jsTag的按钮的第一扩展组件,并调用第一交互模块220。第一交互模块220调用JS引擎,并将所述按钮的第一扩展组件的唯一标识符jsTag以及调用删除所述按钮的第二扩展组件的指令交付给JS引擎270。JS引擎270将所述按钮的第一扩展组件的唯一标识符jsTag以及调用删除所述按钮的第二扩展组件的指令传递至第二交互模块230。第二交互模块230解析JS引擎270传递的所述按钮的第一扩展组件的唯一标识符jsTag,且基于所述唯一标识符jsTag在第二存储器260中查找所述按钮的第二扩展组件,然后调用第二扩展模块240,第二扩展模块240删除具有相同唯一标识符的所述按钮的第二扩展组件,而第二扩展模块240在删除所述按钮的第二扩展组件时会调用原生更新模块320,原生更新模块320调用IOS SDK中的该按钮的扩展组件并将其删除,在第二扩展模块240将第二扩展组件删除时会反馈一删除完成的消息给第二交互模块230,第二交互模块240将该删除完成的消息通过JS引擎传递至第一交互模块220,第二交互模块220根据所述删除完成的消息将所述按钮的第一扩展组件从第一存储器250中删除。
可选地,第一交互模块220也可以先根据所述按钮的唯一标识符jsTag从第一存储器250中查找到所述按钮的第一扩展组件并将其删除,而不需要在接收到JS引擎传递过来的删除完成的消息之后再删除。可选地,第二交互模块230,也可以在解析JS引擎270传递的所述按钮的唯一标识符jsTag之后,从第二存储器260中查找到具有所述唯一标识符jsTag的第二扩展组件并将其删除,而不需要在接收到来自第二扩展模块240返回的删除完成消息时再删除。
另外,上述描述的本发明的应用更新装置300主要是从JS逻辑代码侧实现对原生开发语言的SDK侧的更新。但本发明并不限于此。本发明的应用更新装置300还可以实现从原生开发语言的SDK侧向JS逻辑代码侧触发的事件的传递,例如监听事件、键盘文件输入、点击按钮后的反馈事件等,这主要是通过扩展组件的唯一标识符jsTag来实现。
例如,从原生开发语言的SDK(例如IOS SDK)触发一个点击按钮的事件时,第二扩展模块240中的相应的按钮的第二扩展组件会被触发,并将该触发按钮事件及第二扩展组件的唯一标识符传递至第二交互模块230,例如通过如下代码来实现:
第二交互模块230调用JS引擎270并将所述按钮的第二扩展组件的唯一标识符jsTag以及要调用所述事件的指令交付给所述JS引擎270,例如通过如下代码来实现:
JS引擎270将它们传递给第一交互模块220。
第一交互模块220解析所述唯一标识符jsTag并从所述第一存储器250中查找对应的第一扩展组件,然后回调第一扩展模块210,例如通过如下代码来实现:
第一扩展模块210接收到被回调的触发,在JS脚本语言侧表示按钮被触发一次,从而实现对按钮的点击的触发。例如可以通过如下代码来实现:
图4示出了根据本发明的另一种实施方式的应用更新装置300的结构示意图。如图4所示,应用更新装置300包括关于图3所述的各个模块之外,还具有适配器330。其中,应用更新装置300中的逻辑更新模块310从服务器侧下载的所述应用的扩展组件的更新逻辑JS代码包含适用于不同运行环境的多个更新逻辑版本,以对在不同操作***运行环境下(例如IOS、Android、和WP8操作***)的应用都可以进行更新。通常,应用在开发时,由于要适用于移动终端的不同操作***,会相应地开发适用不同操作***运行环境的版本,以供使用不同操作***的移动终端的用户使用,例如分别开发在IOS、Android、和WP8操作***下运行的不同版本。而本发明将针对不同操作***的更新逻辑全部放在一个JS文件中,从服务器侧一次下载下来。
适配器330适于检测当前所述移动终端的运行环境,并从所述更新逻辑的JS代码中选择适于所述运行环境的更新逻辑版本,将其分配给绑定装置200。例如适配器330通过调用移动终端操作***中的一个参数而获得其反馈的信息的方式而检测到当前用户使用的移动终端的运行环境,当检测的运行环境为例如IOS操作***时,适配器330从更新逻辑的JS代码中选择出适于IOS操作***的更新逻辑JS代码部分,将其分配给绑定装置200。
这样,当应用的某一功能需要更新时,应用开发者将适用于不同移动终端操作***的更新逻辑用JS脚本语言编写好放置于服务器侧。安装此应用的任何移动终端在从服务器侧下载了更新逻辑的JS代码之后,适配器330检测当前移动终端的运行环境,从所述更新逻辑的JS代码中选择适于所述运行环境的更新逻辑版本,将其分配给所述绑定装置200,绑定装置200将更新逻辑所涉及的JS脚本语言的第一扩展组件与原生开发语言的第二扩展组件进行绑定,从而将第一扩展组件的参数传递至第二扩展组件,然后原生更新模块320基于第二扩展组件更新SDK中相应的扩展组件,从而能够实现对应用的某一功能的更新。
以上的应用更新装置300主要是以更新应用中的某一功能为例进行的描述,但本发明并不仅仅限于此。利用本发明的应用更新装置300,也可以更新绑定装置200、适配器330,只需要将更新绑定装置200、适配器330的JS逻辑代码写好放置于服务器侧即可实现。
另外,本发明还提供一种应用,所述应用可以包括前面所述的应用更新装置300,这样的应用可以灵活地进行更新。包含关于图3所描述的本发明的应用更新装置300的应用可以从服务器侧对其的一个或者多个功能进行更新,可以避免每次更新时在平台审核测试所占用的时间,但这时仍然需要在服务器侧放置针对不同移动终端操作***的逻辑更新版本。包含关于图4所描述的本发明的应用更新装置300的应用可以从服务器侧对其的一个或者多个功能进行更新,只需在服务器侧放置一个统一的包含针对不同移动终端操作***的逻辑更新版本的JS代码文件即可,由应用在本地自行选择适用自己的更新逻辑版本,这一方面避免每次更新时在平台审核测试所占用的时间,另一方面,可以使更新方式变得更为灵活,而不用为每个操作***单独开发一个更新逻辑文件。
特别说明的是,上述更新包括创建、修改、删除等。上述的模块划分只为了说明上的方便,本发明不限于上述的划分,实际上可以根据需要而进行不同的划分,但所有这些都应视为属于本发明的保护范围。
本发明还提供一种应用更新方法,如图5所示,其示出了根据本发明的应用更新方法500的流程图。本发明的应用更新方法500适用于移动终端,起始于步骤S510,在步骤S510,从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码,所述扩展组件的参数包括扩展组件的唯一标识符,所述扩展组件的更新逻辑适用于在所述移动终端的运行环境下运行。这里的扩展组件可以是所述应用的任何扩展组件,例如按钮、窗口、或者表格等等。当开发者欲在已经上线的应用中添加一个新按钮时,只需将创建新按钮的JS逻辑代码放置于服务器侧,当用户启动所述应用时则从服务器侧下载所述JS逻辑代码,例如,从服务器侧下载适用于在IOS运行环境下创建按钮JSUIButton的代码如下:
var testUIButton=new JSUIButton();
接下来,在步骤S520,基于第一扩展组件框架创建包括唯一标识符的第一扩展组件。其中,所述第一扩展组件框架基于原生开发语言的软件开发包SDK的组件框架、用JS脚本语言创建且包括标识符选项。所述第一扩展组件框架相对于原生开发语言的SDK组件框架增加了一个标识符选项。所述第一扩展组件框架可以由应用程序接口API来实现,由于对应于API的函数中不仅包括第一扩展组件的属性参数选项,而且包括标识符选项,所以基于所述API创建的第一扩展组件不仅包括表明第一扩展组件属性的属性参数,而且包括对应该第一扩展组件的唯一标识符。当执行所述步骤S520时,在步骤S510所获得的扩展组件的唯一标识符会被分别赋予给新创建的第一扩展组件。当在步骤510中所获得的创建扩展组件的JS逻辑代码中包含扩展组件的属性参数时,在步骤S520中创建第一扩展组件时,则将所述扩展组件的属性参数同时赋予给所创建的第一扩展组件,当在步骤510中所获得的创建扩展组件的JS逻辑代码中不包含扩展组件的属性参数时,在步骤S520中创建第一扩展组件时,则所创建的第一扩展组件使用缺省设置的属性参数。
例如,根据从服务器侧下载的JS逻辑而创建一个在IOS操作***的运行环境下使用的按钮的第一扩展组件JSButton的实现代码如下:
接下来,在步骤S530,通过J S引擎实现JS脚本语言与原生开发语言之间的交互,所述交互包括传递第一扩展组件的参数以及调用原生开发语言中对应创建第二扩展组件的模块的指令。具体地,将第一扩展组件的参数以及调用原生开发语言中对应创建第二扩展组件的模块的指令交付给JS引擎,然后JS引擎再将它们传递至原生开发语言侧的创建第二扩展组件的模块。这里的JS引擎可以根据需要选择现有的任何一款JS引擎,例如Spidermonkey、V8等,也可以使用浏览器中的引擎,具体地,在浏览器启动之后,将浏览器的功能隐藏,只启动JS引擎。下面给出实现步骤S530的一种方式的代码:
在上述代码中,通过使用Cordova封装IOS SDK组件中的UIWEBVIEW,利用UIWEBVIEW内提供的JS引擎实现JS脚本语言与IOS的Objective-C语言之间的交互。通过上述代码,调用原生开发语言中的对应的创建按钮的功能,即调用JS_binding_core.m文件中的js_binding_uibutton_initWithFrame模块。另外,将要创建的按钮的属性参数x,y,w,h和唯一标识符jsTag传递至JS_binding_core.m文件中的创建按钮的js_binding_uibutton_initWithFrame模块。
接下来,在步骤S540,解析通过JS引擎交互的参数。当被传递的有关第一扩展组件的参数包括属性参数和唯一标识符时,用Objective-C语言解析所述第一扩展组件的属性参数和唯一标识符;当被传递的有关第一扩展组件的数据包括唯一标识符时,用Objective-C语言解析所述第一扩展组件的唯一标识符。
例如,可以通过如下代码来实现解析被传递的第一扩展组件的参数:
接下来,在步骤S550,基于所述解析的结果以及第二扩展组件框架创建第二扩展组件。其中,所述第二扩展组件框架基于原生开发语言的SDK的组件框架用原生开发语言创建且包含标识符选项。由于第二扩展组件框架与第一扩展组件框架都是基于原生开发语言的SDK的组件框架创建的,因此,在第二扩展组件框架与第一扩展组件框架一一对应,例如,第二扩展组件框架与第一扩展组件框架都包括创建按钮组件的框架、创建窗口组件的框架等等。例如可以通过如下代码来实现创建按钮的第二扩展组件:
其中,对所述按钮的第二扩展组件ExtUIButton的唯一标识符赋予了与第一扩展组件一样的唯一标识符jsTag。因此,第二扩展组件与对应的第一扩展组件具有相同的唯一标识符,从而实现二者的绑定。
接下来,在步骤S560,根据所述第二扩展组件更新所述应用的软件开发包SDK中的所述扩展组件。例如,在步骤S550中的代码中包含了相应的实现代码:
可选地,本发明的应用更新方法500还包括步骤S525(图中未示出),在步骤S525,将所创建的第一扩展组件存放于存储器中,例如存放于哈希表或数据库中,以便于对已创建的第一扩展组件通过其唯一标识符对其进行管理,所述管理包括对其进行修改、删除等。
另外,本发明的应用更新方法500还包括步骤S555(图中未示出),在步骤S555,将所创建的第二扩展组件存放于存储器中,例如存放于哈希表或数据库中,以便于对已创建的第二扩展组件通过其唯一标识符对其进行管理,所述管理包括对其进行修改、删除等。
上面描述的本发明的应用更新方法500主要是以创建扩展组件为例说明从JS逻辑代码侧实现对原生开发语言的SDK侧的更新。但本发明并不限于此。本发明的应用更新方法500还可以用于对所创建的扩展组件的删除及修改。
图6示出了根据本发明的一种实施方式的修改扩展组件的应用更新方法的流程图。本发明的修改扩展组件的应用更新方法500包括前面关于图5所述的应用更新方法500,通过图5所示的应用更新方法500对应用的一扩展组件赋予唯一标识符,从而创建一具有唯一标识符的扩展组件,之后可以对该创建的扩展组件进行修改。通常,如果对应用的一扩展组件进行修改的话,在上述步骤S510中,从服务器侧下载的所述应用的更新逻辑JS代码不仅包括创建该扩展组件的JS逻辑代码,而且也包括对该创建的扩展组件进行修改的JS逻辑代码,然后先执行创建该扩展组件的JS逻辑代码以为该扩展组件赋予唯一标识符,再执行对该创建的扩展组件进行修改的JS逻辑代码。另外,也可以先从服务器侧下载创建该扩展组件的JS逻辑代码,待该扩展组件被创建后,再从服务器侧下载对该创建的扩展组件进行修改的JS逻辑代码,然后执行。本发明对此并不做任何限制。
对根据前面所述的应用更新方法500创建的扩展组件进行修改,也是应用更新方法500的一部分,但为了描述清晰、简洁,这里不再重复描述前面所述的创建扩展组件的步骤,而是在扩展组件已经根据前面图5所述的应用更新方法500创建好的前提下再进一步描述如何修改所创建的扩展组件。为了简便起见,图6仅示出了应用更新方法500中修改扩展组件部分的方法流程图。
下面假设对创建的扩展组件进行修改的JS逻辑代码已经下载到移动终端中为例说明本发明的应用更新方法中修改扩展组件的方法部分。如图6所示,修改扩展组件的方法部分起始于步骤S5110,在步骤S5110,执行从服务器侧下载的对所创建的扩展组件进行修改的JS代码,其中包括待修改的扩展组件的参数,所述参数包括新属性参数和唯一标识符。例如,从服务器侧下载如下对已创建的按钮进行修改的JS逻辑代码:testUIButton.initWithFrame('240','420','91','35','AppDelegate.testUIButton')。
上述JS逻辑代码包括要修改的按钮的属性参数及唯一标识符jsTag,具体地包括:表明按钮的位置的坐标x=240,y=420,按钮的宽度w=91,按钮的高度h=35,该按钮组件的唯一标识符jsTag与创建该按钮的唯一标识符jsTag相同,都为AppDelegate.testUIButton。
接下来,在步骤S5120,基于所述唯一标识符查找第一扩展组件,并将所述第一扩展组件的新属性参数赋予给所述第一扩展组件,从而修改了第一扩展组件。例如,对于上述修改按钮的例子,查找唯一标识符jsTag为AppDelegate.testUIButton的第一扩展组件,并将x=240,y=420,w=91,h=35赋予给唯一标识符jsTag为AppDelegate.testUIButton的第一扩展组件,由此该按钮的第一扩展组件被修改。
步骤S5125,将修改后的第一扩展组件存储于存储器中,例如存储于原来的哈希表或者数据库中。接下来,在步骤S5130,通过J S引擎实现JS脚本语言与原生开发语言之间的交互,所述交互包括调用原生开发语言中修改与所述第一扩展组件对应的第二扩展组件的模块的指令以及传递第一扩展组件的参数。具体地,将第一扩展组件的参数以及调用原生开发语言中对应修改第二扩展组件的模块的指令交付给JS引擎,然后JS引擎再将它们传递至原生开发语言侧,调用原生开发语言中对应修改第二扩展组件的模块。例如,对于上述修改按钮的例子,可以通过JS引擎传递调用Obejctive-C语言侧的修改第二扩展组件的模块指令并将按钮的第一扩展组件的x,y,w,h和唯一标识符jsTag传递至Obejctive-C语言侧。
接下来,在步骤S5140,解析通过JS引擎传递的第一扩展组件的参数,以供修改对应的第二扩展组件使用。例如,对于上述修改按钮的例子,解析按钮第一扩展组件的属性参数x,y,w,h和唯一标识符jsTag。
接下来,在步骤S5150,基于解析到的所述唯一标识符查找对应的第二扩展组件,并将解析到的第一扩展组件的新属性参数赋予所查找到的对应的第二扩展组件,从而修改了第二扩展组件。例如,对于上述修改按钮的例子,通过AppDelegate.testUIButton这一唯一标识符jsTag查找具有相同的唯一标识符的按钮的第二扩展组件,并将解析到的按钮第一扩展组件的新属性参数x,y,w,h赋予给该第二扩展组件的属性参数,从而实现了对唯一标识符jsTag为AppDelegate.testUIButton的按钮的第二扩展组件的修改。
接下来,在步骤S5160,根据修改后第二扩展组件修改所述应用的软件开发包SDK中的所述扩展组件。由于所述应用的软件开发包SDK中具有与所述第二扩展组件对应的扩展组件,因此,通过第二扩展组件可以调用所述应用的软件开发包SDK中对应的扩展组件并对其进行修改,即对SDK中的对应的扩展组件的属性参数进行修改。例如,对于上述修改按钮的例子,可以修改IOS SDK中的该按钮的属性参数,从而实现了对该按钮的扩展组件的修改。
另外,在上述修改扩展组件的方法部分,还可以包括步骤S5125,在步骤S5125,将修改后的第一扩展组件存储于存储器中,例如存储于原来的哈希表或者数据库中。另外,还可以包括步骤S5155,在步骤S5155,将修改后的第二扩展组件存储于存储器中,例如存储于原来的哈希表或者数据库中,以方便进行管理。
图7示出了根据本发明的一种实施方式的删除扩展组件的应用更新方法的流程图。本发明的删除扩展组件的应用更新方法500包括前面参照图5所述的应用更新方法500,通过图5所示的应用更新方法500对应用的一扩展组件赋予唯一标识符,从而创建一具有唯一标识符的扩展组件,之后根据需要可以对该扩展组件进行删除。通常如果对应用的一扩展组件进行删除的话,在上述步骤S510中,从服务器侧下载的所述应用的更新逻辑JS代码不仅包括创建该扩展组件的JS逻辑代码,而且也包括对该创建的扩展组件进行删除的JS逻辑代码,然后先执行创建该扩展组件的JS逻辑代码以为该扩展组件赋予唯一标识符,再执行对该创建的扩展组件进行删除的JS逻辑代码。另外,也可以先从服务器侧下载创建该扩展组件的JS逻辑代码,待该扩展组件被创建后,再从服务器侧下载对该创建的扩展组件进行删除的JS逻辑代码,然后执行。本发明对此并不做任何限制。
对根据前面所述的应用更新方法500创建的扩展组件进行删除,也是应用更新方法500的一部分,但为了描述清晰、简洁,这里不再重复描述前面所述的创建扩展组件的步骤,而是在扩展组件已经根据前面所述的应用更新方法500创建好的前提下再进一步描述如何删除所创建的扩展组件。为了简便起见,图7仅示出了应用更新方法500中删除扩展组件的部分的方法流程图。
下面假设对创建的扩展组件进行删除的JS逻辑代码已经下载到移动终端中为例说明本发明的应用更新方法中删除扩展组件的方法部分。如图7所示,删除扩展组件的方法部分起始于步骤S5210,在步骤S5210,执行从服务器侧下载的删除所创建的扩展组件的JS代码,在所述删除所创建的扩展组件的JS代码中包括待删除的扩展组件的唯一标识符。例如,当要删除在所述应用中一已创建的按钮时,则所述更新逻辑JS代码包括待删除的按钮的扩展组件的唯一标识符“AppDelegate.testUIButton”。
接下来,在步骤S5220,删除具有所述唯一标识符的所述第一扩展组件。例如,对于上述删除已创建的按钮的例子,将唯一标识符jsTag为AppDelegate.testUIButton的第一扩展组件删除。
接下来,在步骤S5230,通过J S引擎实现JS脚本语言与原生开发语言之间的交互,所述交互包括调用原生开发语言中删除与所述第一扩展组件对应的第二扩展组件的模块的指令以及传递第一扩展组件的唯一标识符。具体地,将第一扩展组件的参数以及调用原生开发语言中对应删除第二扩展组件的模块的指令交付给JS引擎,然后JS引擎再将它们传递至原生开发语言侧的删除第二扩展组件的模块。例如,对于上述删除按钮的例子,可以通过JS引擎调用修改第二扩展组件的模块的指令并将按钮的第一扩展组件的唯一标识符jsTag传递至原生开发语言侧。
接下来,在步骤S5240,解析通过JS引擎传递的第一扩展组件的唯一标识符,以供删除对应的第二扩展组件使用。例如,对于上述删除按钮的例子,解析按钮第一扩展组件的唯一标识符jsTag。
接下来,在步骤S5250,基于解析到的所述唯一标识符查找对应的第二扩展组件,并删除所述第二扩展组件。例如,对于上述删除按钮的例子,通过AppDelegate.testUIButton这一唯一标识符jsTag查找具有相同的唯一标识符的按钮的第二扩展组件,并将其删除。
接下来,在步骤S5260,基于第二扩展组件调用所述应用的软件开发包SDK中的对应的所述扩展组件并删除。由于所述应用的软件开发包SDK中具有与所述第二扩展组件对应的扩展组件,因此,通过所述第二扩展组件可以调用所述应用的软件开发包SDK中对应的扩展组件并将其删除。例如,对于上述删除按钮的例子,可以在删除第二扩展组件前可以基于所述按钮的第二扩展组件调用IOS SDK中的对应按钮组件并将其删除,然后再删除第二扩展组件。
可选地,在步骤S5230中还可以在存储器中查找具有所述唯一标识符的第一扩展组件,并将其从存储器中删除。在步骤S5240中还可以在存储器中查找具有所述唯一标识符的第二扩展组件,并将其从存储器中删除。可选地,在步骤S5250中删除了第二扩展组件之后,发送一删除成功的消息,将存储器中的第二扩展组件删除,并将该删除成功的消息以及唯一标识符通过JS引擎传递至JS脚本语言侧,再从存储器中删除具有相同唯一标识符的第一扩展组件。利用这种方式,可以确保在原生开发语言的SDK中的扩展组件被删除。
另外,上述描述的本发明的应用更新方法并不限于此对应用中的扩展组件的创建、修改和删除等,还可以实现从原生开发语言的SDK侧向JS逻辑代码侧触发的事件的传递,例如监听事件、键盘文件输入、点击按钮后的反馈事件等,这主要是通过扩展组件的唯一标识符jsTag来实现。
例如,当从原生开发语言的SDK(例如IOS SDK)触发一个点击按钮的事件时,与该按钮对应的第二扩展组件被触发,并将该触发按钮事件以及所述第二扩展组件的唯一标识符交付至JS引擎;随后,通过JS引擎实现原生开发语言与JS脚本语言之间的交互,所述交互包括调用触发与所述第二扩展组件对应的第一扩展组件的指令以及所述第二扩展组件的唯一标识符;随后,解析通过JS引擎传递的第二扩展组件的唯一标识符,且基于所述唯一标识符从存储器中查找与其对应的第一扩展组件,回调所述第一扩展组件,完成触发事件的传递。
图8示出了根据本发明的另一种实施方式的应用更新方法500的流程图。图8所示的应用更新方法500与前面所述的应用更新方法500的区别之处在于,在步骤S510,从服务器侧下载的所述应用的扩展组件的更新逻辑JS代码包含适用于不同运行环境的多个更新逻辑版本。当该更新逻辑JS代码被下载至安装所述应用的移动终端时,无论该移动终端使用哪一种操作***(例如IOS、Android、和WP8操作***中任何一种),都可以实现对所述应用的更新。另外,在执行完步骤S510之后执行一新增加的步骤S515,在步骤S515,检测当前所述移动终端的运行环境,并从所述更新逻辑的JS代码中选择适于所述运行环境的更新逻辑版本。随后,再执行图5中的其它步骤。关于图5中的其它步骤与应用更新方法500的步骤相同,为了简洁起见,这里不再一一重复描述。另外,图8所示的应用更新方法也可以用于图6所示的修改扩展组件的应用更新方法中,也可以用于图7所示的删除扩展组件的应用更新方法中。
另外,可选地,本发明的上述应用更新方法并不限于对所述应用中的扩展组件的更新,也可以实现对所采用的第一扩展组件框架及第二扩展组件框架及相关部分的更新。
利用本发明的应用更新装置及方法,可以实现同一应用在具有不同操作***的移动终端上的更新与显示,而无需依赖于原生开发语言SDK所提供的API,实现在服务器端一处编写JS逻辑代码,而能够在不同操作***的移动终端上运行。另外,通过使用JS脚本语言动态更新逻辑代码,使得应用经平台审核而进行更新的次数减少。还有,由于在JS逻辑代码侧进行逻辑处理,在原生开发语言侧进行图形渲染处理,达到渲染与逻辑相分离,可提高客户端在渲染层面与逻辑层面上的提速,包括优化客户端组件等实施的可能性。另外,可以提高应用的开发灵活度,开发调试可以在任何操作***下进行。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的浏览器客户端中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (9)
1.一种绑定装置,其驻留在移动终端内,所述装置包括:
第一扩展模块,其具有基于原生开发语言的软件开发包SDK的组件框架用JS脚本语言创建的包括标识符选项的第一扩展组件框架,且基于所述第一扩展组件框架创建第一扩展组件,每个第一扩展组件的参数都包括唯一标识符;
第二扩展模块,其具有基于原生开发语言的SDK的组件框架用原生开发语言创建的包含标识符选项的第二扩展组件框架,且基于所述第二扩展组件框架创建第二扩展组件;
第一交互模块,其调用JS引擎,并将第一扩展组件的参数以及要创建与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎,所述参数包括唯一标识符;
JS引擎,其将第一扩展组件的参数以及要创建第二扩展组件的指令传递至第二交互模块;
第二交互模块,其用原生开发语言解析所述JS引擎所传递的第一扩展组件的参数,并调用第二扩展模块;
其中,所述第二扩展模块基于所述第二交互模块解析的第一扩展组件的参数创建所述第二扩展组件,使得所述第二扩展组件具有与所述第一扩展组件相同的唯一标识符。
2.根据权利要求1所述的装置,还包括:
第一存储器,其适于存储所述第一扩展组件;以及
第二存储器,其适于存储所述第二扩展组件;
其中,所述第一交互模块还适于管理所述第一扩展组件,所述管理包括从所述第一存储器中查找、删除、修改所述第一扩展组件;
所述第二交互模块还适于管理所述第二扩展组件,所述管理包括从所述第二存储器中查找、删除、修改所述第二扩展组件。
3.根据权利要求2所述的装置,其中,
当要删除第一扩展组件时,
所述第一扩展模块基于第一扩展组件的唯一标识符删除所创建的第一扩展组件;
所述第一交互模块调用JS引擎,并将所述第一扩展组件的的唯一标识符以及调用删除与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎;
所述JS引擎将所述第一扩展组件的唯一标识符以及要调用的删除与所述第一扩展组件对应的第二扩展组件的指令传递给所述第二交互模块;
所述第二交互模块解析所述第一扩展组件的唯一标识符;
所述第二扩展模块基于所述第二交互模块解析的所述第一扩展组件的唯一标识符删除所述第二扩展组件,并传递删除完成消息给所述所述第二交互模块,所述第二交互模块将所述第二扩展组件从所述第二存储器中删除。
4.根据权利要求1或2所述的装置,其中,
当要修改第一扩展组件时,从服务器侧获取所述第一扩展组件的参数,所述参数包括属性参数及唯一标识符,
所述第一扩展模块基于所述第一扩展组件的属性参数及唯一标识符修改所创建的第一扩展组件;
所述第一交互模块调用JS引擎,并将所述第一扩展组件的参数以及调用修改与所述第一扩展组件对应的第二扩展组件的指令交付给所述JS引擎;
所述JS引擎将所述第一扩展组件的参数以及要调用的修改与所述第一扩展组件对应的第二扩展组件的指令传递给所述第二交互模块;
所述第二交互模块解析所述第一扩展组件的参数;
所述第二扩展模块基于所述第二交互模块解析到的所述第一扩展组件的新属性参数修改所述第二扩展组件。
5.一种应用更新装置,其驻留于移动终端内,所述装置包括:
逻辑更新模块,其适于从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码,所述扩展组件包括扩展组件的唯一标识符,所述扩展组件的更新逻辑适用于在所述移动终端的运行环境下运行;
根据权利要求1-4中任何一项所述的绑定装置,其根据所述扩展组件的更新逻辑的运行使JS脚本语言的第一扩展组件与原生开发语言的第二扩展组件绑定,所述绑定包括具有相同的唯一标识符;以及
原生更新模块,其适于根据所述绑定装置的第二扩展模块所创建的第二扩展组件而更新所述应用的软件开发包SDK中的对应的所述扩展组件。
6.根据权利要求5所述的应用更新装置,
其中,所述逻辑更新模块从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码包含适用于不同运行环境的多个更新逻辑版本;
所述应用更新装置还包括:
适配器,其适于检测所述移动终端的运行环境,并从所述更新逻辑的JS代码中选择适于所述运行环境的更新逻辑版本,将其分配给所述应用更新装置中的绑定装置。
7.一种应用更新方法,其驻留于移动终端内,所述方法包括:
从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码,所述扩展组件的参数包括扩展组件的唯一标识符,所述扩展组件的更新逻辑适用于在所述移动终端的运行环境下运行;
基于第一扩展组件框架创建包括所述唯一标识符的第一扩展组件,所述第一扩展组件的参数与所述扩展组件的参数相同,其中所述第一扩展组件框架基于原生开发语言的软件开发包SDK的组件框架用JS脚本语言创建且包括标识符选项;
通过JS引擎实现JS脚本语言与原生开发语言之间的交互,所述交互包括传递第一扩展组件的参数以及调用原生开发语言中对应创建第二扩展组件的模块;
解析通过JS引擎交互的参数;
基于所述解析的结果以及第二扩展组件框架创建第二扩展组件,所述第二扩展组件框架基于原生开发语言的SDK的组件框架用原生开发语言创建且包含标识符选项,所述第二扩展组件具有与所述第一扩展组件相同的唯一标识符;
根据所述第二扩展组件更新所述应用的软件开发包SDK中的对应的扩展组件。
8.根据权利要求7所述的方法,其中,还包括:
将所创建的第一扩展组件存放于存储器中;以及
将所创建的第二扩展组件存放于存储器中。
9.根据权利要求7或8所述的方法,其中,
在所述从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码的步骤中,从服务器侧下载的所述应用的扩展组件的更新逻辑的JS代码包括适用于不同运行环境的多个更新逻辑版本;
在所述从服务器侧下载所述应用的扩展组件的更新逻辑的JS代码的步骤之后还包括:
检测当前所述移动终端的运行环境,并从所述更新逻辑的JS代码中选择适于所述运行环境的更新逻辑版本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510034204.1A CN104572114B (zh) | 2015-01-23 | 2015-01-23 | 一种绑定装置、应用更新装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510034204.1A CN104572114B (zh) | 2015-01-23 | 2015-01-23 | 一种绑定装置、应用更新装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104572114A CN104572114A (zh) | 2015-04-29 |
CN104572114B true CN104572114B (zh) | 2017-11-28 |
Family
ID=53088280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510034204.1A Active CN104572114B (zh) | 2015-01-23 | 2015-01-23 | 一种绑定装置、应用更新装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104572114B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106682009B (zh) * | 2015-11-06 | 2020-03-06 | 北大方正集团有限公司 | Epub浏览器页面的生成方法、装置与手机 |
CN106686200B (zh) * | 2015-11-09 | 2020-01-31 | 五八同城信息技术有限公司 | 移动应用程序更新方法、移动终端及更新*** |
CN107526584B (zh) * | 2016-10-18 | 2020-04-07 | 腾讯科技(深圳)有限公司 | 数据接入方法和装置 |
CN108345531B (zh) * | 2017-01-23 | 2021-03-30 | 阿里巴巴集团控股有限公司 | 一种测试方法、装置及*** |
CN107332911A (zh) * | 2017-07-03 | 2017-11-07 | 珠海金山网络游戏科技有限公司 | 一种基于客户端版本号分配可登陆服务器的方法和装置 |
CN110018952B (zh) * | 2018-01-10 | 2022-12-27 | 武汉斗鱼网络科技有限公司 | 一种js代码的测试方法、存储介质、设备和*** |
CN108228220A (zh) * | 2018-04-17 | 2018-06-29 | 深圳携程网络技术有限公司 | 应用更新方法及其***、存储介质、电子设备 |
CN108632807B (zh) * | 2018-05-03 | 2021-08-17 | 平安科技(深圳)有限公司 | 移动终端访问控制的方法及装置 |
CN108595160B (zh) * | 2018-05-16 | 2022-04-01 | 福建天泉教育科技有限公司 | Js调用原生对象的方法、存储介质 |
CN108804243B (zh) * | 2018-05-23 | 2022-11-25 | 北京五八信息技术有限公司 | 一种交互方法、装置、计算机设备及计算机可读存储介质 |
CN108804284B (zh) * | 2018-05-23 | 2022-03-11 | 北京五八信息技术有限公司 | 一种崩溃信息的收集方法、装置、设备及存储介质 |
CN110704026A (zh) * | 2018-07-10 | 2020-01-17 | 武汉斗鱼网络科技有限公司 | 软件开发工具包的调用方法、装置、终端及可读介质 |
CN109079849B (zh) * | 2018-08-07 | 2022-04-29 | 北京云迹科技股份有限公司 | 开放型机器人*** |
CN109271156B (zh) * | 2018-09-25 | 2022-02-18 | Oppo广东移动通信有限公司 | 游戏平台的底层调用方法及相关产品 |
CN112153064B (zh) * | 2020-09-28 | 2022-11-22 | 上海缓存命中科技有限公司 | 应用商店及其使用方法 |
CN113741764A (zh) * | 2021-07-30 | 2021-12-03 | 阿里巴巴新加坡控股有限公司 | 组件处理方法、装置及设备 |
CN113778386B (zh) * | 2021-09-16 | 2024-06-07 | Oppo广东移动通信有限公司 | 组件生成方法、装置、存储介质及电子设备 |
CN114968264B (zh) * | 2022-07-28 | 2022-10-25 | 新华三半导体技术有限公司 | 一种网络处理器交互***、方法、电子设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20100087860A (ko) * | 2009-01-29 | 2010-08-06 | 주식회사 로코드 | 모바일 웹 어플리케이션 프레임웍, 모바일 단말 및 저장매체 |
CN102222005A (zh) * | 2011-07-12 | 2011-10-19 | 铜陵玉成软件科技有限责任公司 | 面向业务模型的软件运行平台及其运行方式 |
CN103092599A (zh) * | 2011-11-05 | 2013-05-08 | 京瓷办公信息***株式会社 | 软件开发套件 |
CN103500102A (zh) * | 2013-10-16 | 2014-01-08 | 迈普通信技术股份有限公司 | 一种服务调用方法和提供服务调用的装置 |
CN103677788A (zh) * | 2012-09-25 | 2014-03-26 | 深圳市金正方科技股份有限公司 | 基于j2ee分布式架构的重用框架生成方法、装置及应用*** |
CN104093077A (zh) * | 2013-10-29 | 2014-10-08 | 腾讯科技(深圳)有限公司 | 多终端互联的方法、装置及*** |
-
2015
- 2015-01-23 CN CN201510034204.1A patent/CN104572114B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20100087860A (ko) * | 2009-01-29 | 2010-08-06 | 주식회사 로코드 | 모바일 웹 어플리케이션 프레임웍, 모바일 단말 및 저장매체 |
CN102222005A (zh) * | 2011-07-12 | 2011-10-19 | 铜陵玉成软件科技有限责任公司 | 面向业务模型的软件运行平台及其运行方式 |
CN103092599A (zh) * | 2011-11-05 | 2013-05-08 | 京瓷办公信息***株式会社 | 软件开发套件 |
CN103677788A (zh) * | 2012-09-25 | 2014-03-26 | 深圳市金正方科技股份有限公司 | 基于j2ee分布式架构的重用框架生成方法、装置及应用*** |
CN103500102A (zh) * | 2013-10-16 | 2014-01-08 | 迈普通信技术股份有限公司 | 一种服务调用方法和提供服务调用的装置 |
CN104093077A (zh) * | 2013-10-29 | 2014-10-08 | 腾讯科技(深圳)有限公司 | 多终端互联的方法、装置及*** |
Also Published As
Publication number | Publication date |
---|---|
CN104572114A (zh) | 2015-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104572114B (zh) | 一种绑定装置、应用更新装置及方法 | |
US10204031B2 (en) | Methods and system to create applications and distribute applications to a remote device | |
US9021419B2 (en) | System and method for supporting intelligent design pattern automation | |
Pautasso | Composing restful services with jopera | |
CN104899047B (zh) | 网页框架部署方法和*** | |
Esposito | Programming Microsoft ASP. net 4 | |
CN108132814A (zh) | 应用程序的页面加载方法、装置、计算机设备和存储介质 | |
CN103927253A (zh) | 多浏览器兼容性测试方法及*** | |
CN110347378A (zh) | 项目开发环境的搭建方法及装置 | |
CN106445951A (zh) | 一种文件传输方法和装置 | |
US20160080463A1 (en) | Methods and Systems for Dynamically Generating and Reusing Dynamic Web Content | |
CN109240697A (zh) | 调用处理方法及装置、存储介质 | |
CN108776592A (zh) | 一种页面构建的方法、装置、设备及存储介质 | |
CN105373533B (zh) | 一种页面链接地址的检测方法、客户端及装置 | |
CN112130888B (zh) | 应用程序更新的方法、装置、设备和计算机存储介质 | |
CN101876998A (zh) | 一种实现数据编辑的方法和*** | |
CN104461893A (zh) | 数据处理方法与数据处理装置 | |
AU2019222873B2 (en) | Method and system for providing content | |
CN104539585B (zh) | 浏览器防注入的方法、浏览器客户端和装置 | |
Bretet | Spring mvc cookbook | |
Davi | Design and development of an enterprise digital distribution platform for mobile applications | |
KR20110123513A (ko) | 페이지 연동 기능을 구비한 웹 어플리케이션 실행 장치 및 방법 | |
Rady | Serverless single page apps: Fast, scalable, and available | |
Hillar | Hands-on RESTful Python Web Services: Develop RESTful Web Services Or APIs with Modern Python 3.7 | |
Sahay | Hands on with ASP. NET MVC: Covering MVC 6 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20180507 Address after: 100020 Beijing Chaoyang District East Bridge Road 12, 1, 5, 506 rooms. Patentee after: Beijing science and Technology Co., Ltd. Address before: 100020 Chaoyang District, Beijing Chao Wai Street B 6, 10, 1118 Patentee before: MENGYOU (BEIJING) TECHNOLOGY CO., LTD. |