一种网页脚本语言跨移动操作系统平台原生接口调用的装置及方法转让专利

申请号 : CN201410834506.2

文献号 : CN104461575B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 方宝友饶英俊李建中马春宇

申请人 : 北京华电万通科技有限公司

摘要 :

本发明公开了一种网页脚本语言跨移动操作系统平台原生接口调用的装置和方法,该装置包括:正向系统,用以将网页脚本程序的数据交换载体传递到移动终端的原生接口;和反向系统,其通过同步执行本地服务或异步执行本地服务的方式将移动终端原生接口回传的数据交换载体传递到网页脚本程序;其中,正向系统包括:统一调用接口模块、调用提示模块、内核封装类模块、插件管理模块;其中,反向子模块包括:回调模块,和回调服务端模块。

权利要求 :

1.一种网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,该装置包括:正向系统,用以将网页脚本程序传出的数据交换载体传递到移动终端的原生接口;和反向系统,其通过同步执行本地服务或异步执行本地服务的方式将移动终端原生接口回传的数据交换载体传递到网页脚本程序;

所述的网页脚本程序为javascript端,所述的数据交换载体为JSON数据信息;

其中,所述正向系统包括:

统一调用接口模块(001),其用于接收网页脚本程序传递的数据交换载体,将数据交换载体传递到调用提示模块(002),还用于将下述调用提示模块(002)回传的数据交换载体传递到网页脚本程序;

统一调用接口模块(001)通过execute函数实现,execute函数如下:execute(success,failure,service,actionID,arguments),其中success是操作执行成功后的回调函数,failure是操作执行失败后的回调函数,service是所要调用的本地原生接口方法名称,actionID是所要执行服务的具体操作,arguments是操作所需要的具体参数;

调用提示模块(002),其接收统一调用接口模块(001)传递的数据交换载体,将数据交换载体传递到内核封装类模块(003),还用以接收下述回调模块(005)回传的数据交换载体或下述回调服务端模块(006)回传的数据交换载体,并将回传的数据交换载体传递到统一调用接口模块(001),所述调用提示模块(002)通过message函数实现,其中,message函数如下:Var r=message(JSON.stringify(arguments),JSON.stringify([service,actionID,callbackID,true]));其中参数true是指示移动终端的原生接口是以同步执行本地服务或异步执行本地服务的方式回传数据交换载体,如果是异步的话,那么message()函数返回空字符串;如果只能同步的话,那么message()函数返回数据交换载体;

内核封装类模块(003),其接收调用提示模块(002)传递的数据交换载体,对数据交换载体进行解析,将数据交换载体中包含的参数信息从数据交换载体中分离出来,并将参数信息传递到插件管理模块(004),内核封装类模块(003)是一个自定义类文件,覆盖了移动浏览器内核文件WebChromeClient下的onJsAlert()、onJsConfirm()、onJsPrompt()方法;

插件管理模块(004),其接收内核封装类模块(003)传递的参数信息,根据接收的数据交换载体调用移动终端的原生接口,插件管理模块(004)通过PluginManager类实现,PluginManager中包括下述方法:PluginManager.execute(service,actionID,callbackID,message,async);

其中,反向模块包括:

回调模块(005),其以同步执行本地服务的方式将原生接口回传的数据交换载体传递到调用提示模块(002);

回调服务端模块(006),其以轮询方式和XHR方式中的一种或两种方式将原生接口回传的数据交换载体传递到调用提示模块(002)和回调模块(005)中,所述XHR方式包括以下步骤:

(1)在回调服务端模块(006)内部设置服务器,该服务器等待调用提示模块(002)的调用;

(2)服务器在接收到调用提示模块(002)的调用后,如果服务器内没有等待回传的数据交换载体,则服务器会保持数秒,数秒后服务器超时,将HTTP/1.1 404传递到调用提示模块(002);

如果服务器内有等待回传的数据交换载体,则将回传的数据交换载体编码成UTF-8后传递到调用提示模块(002)。

2.根据权利要求1所述的网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,移动终端的原生接口包括移动设备的重力计接口、通讯录接口和摄像头接口。

3.根据权利要求1所述的网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,所述轮询方式为调用提示模块(002)调用回调服务端模块(006)后,回调服务端模块(006)向调用提示模块(002)传递回传的数据交换载体。

4.一种利用权利要求1至3之一所述的网页脚本语言跨移动操作系统平台原生接口调用的装置进行网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,该方法包括:正向传递步骤,用以将网页脚本程序传出的数据交换载体传递到移动终端的原生接口;和反向传递步骤,其通过同步执行本地服务或异步执行本地服务的方式将移动终端原生接口回传的数据交换载体传递到网页脚本程序;

其中,所述正向传递步骤包括:

步骤(1)、统一调用接口模块(001)用于接收网页脚本程序传递的数据交换载体,将数据交换载体传递到调用提示模块(002),还用于将下述调用提示模块(002)回传的数据交换载体传递到网页脚本程序;

步骤(2)、调用提示模块(002)接收统一调用接口模块(001)传递的数据交换载体,将数据交换载体传递到内核封装类模块(003),还用以接收下述回调模块(005)回传的数据交换载体或下述回调服务端模块(006)回传的数据交换载体,并将回传的数据交换载体传递到统一调用接口模块(001),步骤(3)、内核封装类模块(003)接收调用提示模块(002)传递的数据交换载体,对数据交换载体进行解析,将数据交换载体中包含的参数信息从数据交换载体中分离出来,并将参数信息传递到插件管理模块(004),步骤(4)、插件管理模块(004)接收内核封装类模块(003)传递的参数信息,根据接收的数据交换载体调用移动终端的原生接口;

其中,反向传递步骤包括:

步骤(1)、回调模块(005)以同步执行本地服务的方式将原生接口回传的数据交换载体传递到调用提示模块(002);

步骤(2)、回调服务端模块(006)以轮询方式和XHR方式中的一种或两种方式将原生接口回传的数据交换载体传递到调用提示模块(002)和回调模块(005)中。

5.根据权利要求4所述的网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,移动终端的原生接口包括移动设备的重力计接口、通讯录接口和摄像头接口。

6.根据权利要求4所述的网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,所述轮询方式为调用提示模块(002)调用回调服务端模块(006)后,回调服务端模块(006)向调用提示模块(002)传递回传的数据交换载体。

7.根据权利要求4所述的网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,所述XHR方式包括以下步骤:

(1)在回调服务端模块(006)内部设置服务器,该服务器等待调用提示模块(002)的调用;

(2)服务器在接收到调用提示模块(002)的调用后,如果服务器内没有等待回传的数据交换载体,则服务器会保持数秒,数秒后服务器超时,将HTTP/1.1 404传递到调用提示模块(002);

如果服务器内有等待回传的数据交换载体,则将回传的数据交换载体编码成UTF-8后传递到调用提示模块(002)。

说明书 :

一种网页脚本语言跨移动操作系统平台原生接口调用的装置

及方法

技术领域

[0001] 本发明涉及原生接口调用装置,特别涉及一种JavaScript跨移动操作系统平台原生接口调用的装置。

背景技术

[0002] 移动操作系统的发展历程,可谓跌宕起伏。从最早的Linux到后来一家独大的Symbian,再到如今风光无限的iOS和Android,移动操作系统日益完善。随着操作系统在产业链核心地位的凸显,各大企业在终端及应用方面的竞争已经演变为生态系统间的竞争。目前移动应用市场已经初步形成了iOS、Android和Windows Phone三大阵营,当然其余的传统阵营(Symbian和RIM等)凭借历史原因和庞大的用户基数也不容小觑。
[0003] 随着移动应用市场的迅猛发展和爆发式增长的企业应用需求,越来越多的开发者也希望能够加入到移动应用开发的大军中。但目前,Android应用是基于Java语言进行开发的,苹果公司的iOS应用是基于Objective-C语言开发的,微软公司的Windows Phone应用则是基于C#语言开发的。如果开发者编写的应用要同时在不同的移动设备上运行的话,则必须掌握多种开发语言,但这势必将严重影响软件开发进度和项目上线时间,并且已经成为开发团队的一大难题。
[0004] 现有技术中,将各移动操作系统原生应用封装成Web应用,通过浏览器访问,这样的web具有跨平台的优势,然而这些基于浏览器的应用无法调用系统API来实现一些高级功能,也不适合高性能要求的场合,浏览体验短期内还无法超载原生应用,不支持离线模式,消息推送不够及时,调用本地文件系统的能力弱。
[0005] 经过对现有技术的检索发现,中国专利申请CN201110029661.3中所公开的一种应用程序开发的方法和装置,该方法可以实现web跨平台调用原生接口,然而,这类装置传递数据方式单一、不够灵活使得数据容易丢失,数据安全性低。
[0006] 由于上述问题的存在,本发明人对现有的移动技术进行研究和分析,以便能制作出一种可以供浏览器突破平台限制访问原生接口的装置和方法,并且该装置传递数据的安全性高,传递数据的方式灵活。

发明内容

[0007] 为了解决上述问题,本发明人进行了锐意研究,结果发现:通过本地桥接法完成从Javascript端到原生接口之间的数据的的互相传递,所述本地桥接法通过正向模块和反向模块实现,本地桥接法弥补原生开发和纯Web开发两种应用开发模式的缺陷,通过同步执行本地服务或异步执行本地服务的方式将移动终端原生接口回传的JSON数据信息传递到JavaScript端,使得该装置数据传递方式多样,灵活,数据的安全性高。从而完成了本发明。
[0008] 本发明的目的在于提供以下方面:
[0009] 第一方面、一种网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,该装置包括:
[0010] 正向系统,用以将网页脚本程序传出的数据交换载体传递到移动终端的原生接口;和
[0011] 反向系统,其通过同步执行本地服务或异步执行本地服务的方式将移动终端原生接口回传的数据交换载体传递到网页脚本程序;
[0012] 其中,所述正向系统包括:
[0013] 统一调用接口模块001,其用于接收网页脚本程序传递的数据交换载体,将数据交换载体传递到调用提示模块002,还用于将下述调用提示模块002回传的数据交换载体传递到网页脚本程序;
[0014] 调用提示模块002,其接收统一调用接口模块001传递的数据交换载体,将数据交换载体传递到内核封装类模块003,还用以接收下述回调模块005回传的数据交换载体或下述回调服务端模块006回传的数据交换载体,并将回传的数据交换载体传递到统一调用接口模块001,
[0015] 内核封装类模块003,其接收调用提示模块002传递的数据交换载体,对数据交换载体进行解析,将数据交换载体中包含的参数信息从数据交换载体中分离出来,并将参数信息传递到插件管理模块004,
[0016] 插件管理模块004,其接收内核封装类模块003传递的参数信息,根据接收的数据交换载体调用移动终端的原生接口;
[0017] 其中,反向模块包括:
[0018] 回调模块005,其以同步执行本地服务的方式将原生接口回传的数据交换载体传递到调用提示模块002;
[0019] 回调服务端模块006,其以轮询方式和XHR方式中的一种或两种方式将原生接口回传的数据交换载体传递到调用提示模块002和回调模块005中。
[0020] 第二方面、根据上述第一方面所述的网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,
[0021] 移动终端的原生接口包括移动设备的重力计接口、通讯录接口和摄像头接口。
[0022] 第三方面、根据上述第一方面所述的网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,
[0023] 所述轮询方式为调用提示模块002调用回调服务端模块006后,回调服务端模块006向调用提示模块002传递回传的数据交换载体。
[0024] 第四方面、根据上述第一方面所述的网页脚本语言跨移动操作系统平台原生接口调用的装置,其特征在于,
[0025] 所述XHR方式包括以下步骤:
[0026] (1)在回调服务端模块006内部设置服务器,该服务器等待调用提示模块002的调用;
[0027] (2)服务器在接收到调用提示模块002的调用后,如果服务器内没有等待回传的数据交换载体,则服务器会保持数秒,数秒后服务器超时,将HTTP/1.1404传递到调用提示模块(002);
[0028] 如果服务器内有等待回传的数据交换载体,则将回传的数据交换载体编码成UTF-8后传递到调用提示模块002。
[0029] 第五方面、一种网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,该装置包括:
[0030] 正向传递步骤,用以将网页脚本程序传出的数据交换载体传递到移动终端的原生接口;和
[0031] 反向传递步骤,其通过同步执行本地服务或异步执行本地服务的方式将移动终端原生接口回传的数据交换载体传递到网页脚本程序;
[0032] 其中,所述正向传递步骤包括:
[0033] 步骤(1)、统一调用接口模块001用于接收网页脚本程序传递的数据交换载体,将数据交换载体传递到调用提示模块002,还用于将下述调用提示模块002回传的数据交换载体传递到网页脚本程序;
[0034] 步骤(2)、调用提示模块002接收统一调用接口模块001传递的数据交换载体,将数据交换载体传递到内核封装类模块003,还用以接收下述回调模块005回传的数据交换载体或下述回调服务端模块006回传的数据交换载体,并将回传的数据交换载体传递到统一调用接口模块001,
[0035] 步骤(3)、内核封装类模块003接收调用提示模块002传递的数据交换载体,对数据交换载体进行解析,将数据交换载体中包含的参数信息从数据交换载体中分离出来,并将参数信息传递到插件管理模块004,
[0036] 步骤(4)、插件管理模块004接收内核封装类模块003传递的参数信息,根据接收的数据交换载体调用移动终端的原生接口;
[0037] 其中,反向传递步骤包括:
[0038] 步骤(1)、回调模块005以同步执行本地服务的方式将原生接口回传的数据交换载体传递到调用提示模块002;
[0039] 步骤(2)、回调服务端模块006以轮询方式和XHR方式中的一种或两种方式将原生接口回传的数据交换载体传递到调用提示模块002和回调模块005中。
[0040] 第六方面、根据上述第五方面所述的网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,
[0041] 移动终端的原生接口包括移动设备的重力计接口、通讯录接口和摄像头接口。
[0042] 第七方面、根据上述第五方面所述的网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,
[0043] 所述轮询方式为调用提示模块002调用回调服务端模块006后,回调服务端模块006向调用提示模块002传递回传的数据交换载体。
[0044] 第八方面、根据上述第五方面所述的网页脚本语言跨移动操作系统平台原生接口调用的方法,其特征在于,
[0045] 所述XHR方式包括以下步骤:
[0046] (1)在回调服务端模块006内部设置服务器,该服务器等待调用提示模块002的调用;
[0047] (2)服务器在接收到调用提示模块002的调用后,如果服务器内没有等待回传的数据交换载体,则服务器会保持数秒,数秒后服务器超时,将HTTP/1.1404传递到调用提示模块(002);
[0048] 如果服务器内有等待回传的数据交换载体,则将回传的数据交换载体编码成UTF-8后传递到调用提示模块002。
[0049] 根据本发明提供的一种JavaScript跨移动操作系统平台原生接口调用的装置及方法,其具有如下有益效果:
[0050] 第一、该装置弥补原生开发和纯Web开发两种应用开发模式的缺陷而生。
[0051] 第二、相同的代码只需要针对不同平台进行编译就能实现在多平台的分发,大大提高了多平台开发的效率。而相较于纯Web应用,开发者还可以跨移动操作系统平台调用原生接口,实现更好的用户体验和功能。
[0052] 第三、该装置通过两种方式回传JSON数据信息,使得该装置数据传递方式灵活,同时也提高了数据传递的安全性,使得回传的数据不易发生丢失。

附图说明

[0053] 图1示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置的结构示意图;
[0054] 图2示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中正向模块结构示意图;
[0055] 图3示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中反向模块结构示意图;
[0056] 图4示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中反向模块结构示意图;
[0057] 图5示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中反向模块结构示意图;
[0058] 图6示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中统一调用接口模块的流程图;
[0059] 图7示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中调用提示模块的流程图;
[0060] 图8示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中插件管理模块的流程图;
[0061] 图9示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中内核封装类模块的流程图;
[0062] 图10示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中回调模块的流程图;
[0063] 图11示出根据本发明一种优选实施方式的一种网页脚本语言跨移动操作系统平台原生接口调用的装置中回调服务端模块的流程图。
[0064] 附图标号说明:
[0065] 001-统一调用接口模块
[0066] 002-调用提示模块
[0067] 003-内核封装类模块
[0068] 004-插件管理模块
[0069] 005-回调模块
[0070] 006-回调服务端模块

具体实施方式

[0071] 下面通过对本发明进行详细说明,本发明的特点和优点将随着这些说明而变得更为清楚、明确。
[0072] 在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
[0073] 在根据本发明的一个优选的实施方式中,如图1-11中所示,本发明通过本地桥接法使得网页脚本语言(网页脚本语言为JavaScript)跨移动操作系统平台调用原生接口,所述本地桥接法通过正向模块和反向模块实现的,本地桥接法弥补原生开发和纯Web开发两种应用开发模式的缺陷,相同的代码只需要针对不同平台进行编译就能实现在多平台的分发,大大提高了多平台开发的效率。而相较于纯Web应用,开发者还可以跨移动操作系统平台调用原生接口,实现更好的用户体验和功能。运用本发明技术,可以有效实现简单的快速的开发移动应用。
[0074] 在一个优选的实施方式中,本发明所述的网页脚本程序为javascript端,所述的数据交换载体为JSON数据信息。
[0075] 在一个优选的实施方式中,如图1-5中,所述正向模块包括:统一调用接口模块001,调用提示模块002,内核封装类模块003和插件管理模块004,
[0076] 其中,统一调用接口模块001接收javascript端的JSON数据信息并将该信息传递到调用提示模块002,并将调用提示模块002回传的JSON数据信息传递到javascript端,统一调用接口模块001是面向浏览器的统一调用模块,所有的桥接请求都通过这一规范化的模块调用,该模块屏蔽移动终端内部复杂的实现细节,简化用户的调用操作,提高了该装置数据传递的效率,使得该装置能够适应各种移动平台。
[0077] 其中,统一调用接口模块001可以通过execute函数实现,execute函数如下:execute(success,failure,service,actionID,arguments),其中success是操作执行成功后的回调函数,failure是操作执行失败后的回调函数,service是所要调用的本地原生接口方法名称,actionID是所要执行服务的具体操作,arguments是操作所需要的具体参数。
[0078] 在一个优选的实施方式中,如图1-2中所示,所述调用提示模块002可以通过message函数实现,其中,message函数如下:
[0079] var r=message(JSON.stringify(arguments),JSON.stringify([service,actionID,callbackID,true]));其中参数true是指示移动终端的原生接口是以同步执行本地服务或异步执行本地服务的方式回传JSON数据信息,如果是异步的话,那么message()函数返回空字符串;如果只能同步的话,那么message()函数返回JSON格式数据信息(如图2中所示)。
[0080] 在一个优选的实施方式中,如图1-2中所示,内核封装类模块(003)该模块是一个自定义类文件,覆盖了移动浏览器内核文件WebChromeClient下的onJsAlert()、onJsConfirm()、onJsPrompt()方法,该模块处理调用提示模块002的请求,该模块利用和改造移动浏览器自带的原生模块来满足桥接需求,便于后期的维护,其中,onJsAlert()、onJsConfirm()、onJsPrompt()方法签名分别如下所示:
[0081] public boolean onJsAlert(WebView view,String url,String message,final JsResult result);
[0082] public boolean onJsConfirm(WebView view,String url,String message,final JsResult result)
[0083] public boolean onJsPrompt(WebView view,String url,String message,String defaultValue,final JsPromptResult result);
[0084] 根据defaultValue会将之前传递过来的JSON数据信息解析出来,解析后该模块调用插件管理模块004。
[0085] 在本发明中,所述解析是将JSON数据信息中的参数信息进行分离,所述参数信息包括:success是操作执行成功后的回调函数,failure是操作执行失败后的回调函数,service是所要调用的移动终端的原生接口方法名称,actionID是所要执行服务的具体操作,arguments是操作所需要的具体参数。
[0086] 在一个优选的实施方式中,如图1中所示,插件管理模块004调用本地原生接口,该模块基于插件管理的方式,最终实现JavaScript层调用移动终端的原生服务接口。其中,插件管理模块004可以通过PluginManager类实现,PluginManager中包括下述方法:
[0087] PluginManager.execute(service,actionID,callbackID,message,async),[0088] 该模块调用移动终端的原生接口,如重力计、通讯录和摄像头等,[0089] 插件管理模块004对移动设备的底层调用都是基于插件式管理的,原因是移动设备硬件信息的不确定性,如调用前会检测设备是否具有摄像头、是否具有重力传感器等,该模块实现松散式和模块间独立式的管理。
[0090] 在一个优选的实施方式中,移动终端的原生接口到JavaScript的通信,通过同步执行本地服务或异步执行本地服务的方式将原生接口回传JSON数据传递到Javascript端,通过两种方式回传数据,使得该装置灵活性增加;同时使得数据不易丢失,进而保证了数据的安全性和完整性。
[0091] 在一个优选的实施方式,回调模块以同步执行本地服务的方式将回传的JSON数据传递到调用提示模块002,回调服务端模块006以异步执行本地服务的方式将原生接口回传的JSON数据信息传递到调用提示模块002和回调模块005中,
[0092] 其中,回调服务端模块006提供一个能够保存JSON数据信息的队列的服务器来响应调用提示模块(002)的HTTP协议的请求,最终保证成功的异步执行下一条JavaScript语句。
[0093] 在一个优选的实施方式中,当该装置的回调模块以同步执行本地服务的方式将回传的JSON数据传递到调用提示模块002时,回调模块可以通过JsResult或JsPromptResult类实现,类中message()方法将JSON数据信息传回message()函数,并通过message()函数传回到JavaScript端。JavaScript端会解析返回值,根据解析结果去回调之前传入的成功或失败的回调函数,从而执行应用逻辑(整个调用过程总结如图3所示)。
[0094] 在一个优选的实施方式中,如图4-5中所示,本地服务的异步执行结果需要通过回调服务端模块(006)实现,
[0095] 回调服务端模块(006)可以通过CallbackContext接口实现,这个接口会保存一个要发送给JavaScript端的JavaScript语句队列,这些语句包含了之前定义的成功或失败的回调函数信息以及本地服务的异步执行结果。既然CallbackContext是个服务器,自然不会主动响应,需要JavaScript端发送一条语句通过CallbackContext.getQueue()方法来获取,在通信模型上有轮询和XHR两种方式可以实现。通过两种方式回传数据,使得该装置传递数据方式灵活,增加了数据的安全性和完整性。
[0096] 在一个优选的实施方式中,轮询方式中借助于message()方法,调用CallbackContext.getQueue()来获取下一条要执行的JavaScript语句并将返回值传给JavaScript端。
[0097] 在一个优选的实施方式中,XHR方式中,CallbackContext上实现了一个简单的服务器,等待异步XHR调用,服务器在接收到连接后会一直保持这个连接直到10秒超时或有要发送的JavaScript语句。超时则回应HTTP/1.1404给客户端;如果有要发送的JavaScript语句,则将其编码成UTF-8能过HTTP响应返回给客户端。
[0098] 实施例:
[0099] 统一调用接口模块001:
[0100] execute(success,failure,service,actionID,arguments);
[0101] 调用提示模块002:
[0102] var r=message(JSON.stringify(arguments),JSON.stringify([service,actionID,callbackID,true]));
[0103] 内核封装类模块003,ChromeClient中的onJsAlert、onJsConfirm或者onJsPrompt方法。
[0104] 插件管理模块004,
[0105] PluginManager.execute(service,actionID,callbackID,message,async);
[0106] 回调模块005,JsResult或JsPromptResult类下的message()。
[0107] 回调服务端模块006,CallbackContext类;
[0108] 其中,Javascript端向原生接口传递数据信息的过程为:execute函数调用message函数,message函数调用onJsAlert、onJsConfirm或onJsPrompt方法,message方法调用PluginManager.execute方法,PluginManager.execute调用原生接口;
[0109] 原生接口向Javascript端传递数据信息的过程为:
[0110] (1)同步执行本地服务的方式:原生接口通过JsResult或JsPromptResult类下message方法向message函数回传数据信息,
[0111] (2)异步执行本地服务的方式:message函数通过轮询和XHR的方式调用CallbackContext.getQueue(),通过getQueue()获取下一条要执行的JavaScript语句。
[0112] (2-1)轮询方式:message函数调用CallbackContext.getQueue()来获取下一条要执行的JavaScript语句并将返回值传给JavaScript端。
[0113] (2-2)XHR方式:在CallbackContext上实现了一个的服务器,等待异步XHR调用,服务器在接收到连接后会一直保持这个连接直到10秒超时或有要发送的JavaScript语句。超时则回应HTTP/1.1404给客户端;如果有要发送的JavaScript语句,则将其编码成UTF-8能过HTTP响应返回给移动终端。
[0114] 在一个优选的实施方式中,调用提示模块002实现轮询请求或XHR请求:
[0115] 轮询请求:实现原理还是基于message函数,message函数拿到结果后直接通过eval函数来调用JavaScript端设置的回调函数(发送端和接收端的整个轮询过程如图4所示)。
[0116] XHR方式。JavaScript端会构造XMLHttpRequest对象发起异步的AJAX GET请求,在请求得到响应后,通过decodeURIComponent()方法UTF-8编码返回文本msg,然后再调用eval(msg)来执行。为了防止其他应用程序通过XHR方式访问这个回调服务器而干扰正常的请求返回结果,JavaScript端还给请求加入了安全令牌,令牌以字符串形式存在于请求的URL中,只有持有该令牌的请求才会得到处理,否则返回HTTP/1.1403(发送端和接收端的整个XHR过程如图5所示)。
[0117] 根据本发明提供的一种JavaScript跨移动操作系统平台原生接口调用的装置及方法,其具有如下有益效果:
[0118] 第一、该装置弥补原生开发和纯Web开发两种应用开发模式的缺陷而生。
[0119] 第二、相同的代码只需要针对不同平台进行编译就能实现在多平台的分发,大大提高了多平台开发的效率。而相较于纯Web应用,开发者还可以跨移动操作系统平台调用原生接口,实现更好的用户体验和功能。运用本发明技术,可以有效实现简单的快速的开发移动应用。
[0120] 以上接合具体实施方式和范例性实例对本发明进行了详细说明,不过这些说明并不能理解为对本发明的限制。本领域技术人员理解,在不偏离本发明精神和范围的情况下,可以对本发明技术方案及其实施方式进行多种等价替换、修饰或改进,这些均落入本发明的范围内。本发明的保护范围以所附权利要求为准。