一种基于网页弹出窗口的客户端内嵌页交互方法及系统与流程

文档序号:12905944阅读:688来源:国知局
一种基于网页弹出窗口的客户端内嵌页交互方法及系统与流程

本发明涉计算机软件领域,特别涉及一种基于网页弹出窗口的客户端内嵌页交互方法及系统。



背景技术:

内嵌页面又称内嵌网页,是一种在客户端软件里面嵌入html(hypertextmarkuplanguage,超级文本标记语言)网页的技术,客户端可以通过加载网站的页面,并将其嵌入到客户端界面当中,由于网页实际保存在后台服务器,因此可以适应快速迭代的需求,一些敏感的业务也可以直接在网页上做,从而避免将接口暴露给客户端。

在当今互联网时代,任何客户端软件或多或少的都会涉及到需要在软件里内嵌网页的问题。可以理解,网页作为展示信息的有效手段,最大的好处在于可以动态更换内容、修复bug而且不需要客户端软件重新发版,所以也是越来越受到大家的青睐,以至于有些客户端软件整个就是由内嵌网页构成,客户端只是提供了一个窗口展示而已,比如,早期的豌豆荚软件客户端。

然而,客户端内嵌网页和传统的浏览器中的网页最大的不同之处在于:内嵌网页需要随时随地地和客户端进行通信、交互用户的操作和响应。例如,一个在内嵌网页中下载资料的场景,通常来讲提供下载的网页从考虑盗链盗、保护流量亦或是推广客户端的角度出发,往往不会直接提供下载地址,这样在浏览器中打开这个网页点击下载将不会有任何反应。但是,如果是在客户端中打开这个网页,当用户点击网页里的下载按钮时,网页此时将相关信息发送给客户端,包括资料的名称、所属、id以及用户的一些当前状态,客户端拿到这些信息后,使用一些安全的通信方式例如https协议,去指定服务器上查询该资料的下载地址,然后进行下载,并且在下载的过程中定时向网页汇报当前的下载进度,以便网页在相关的地方不停的更新下载进度信息,使得这个交互过程看起来就像是在网页中一键下载了一样。上述过程只是内嵌网页与客户端交互的万千场景中的简单一例,足以说明内嵌页与客户端交互的必要性和频繁性,所以,两者之间通信的方式和性能就成了制约响应的的关键。



技术实现要素:

本发明要解决的技术问题是,提供一种用以内嵌页与客户交互的基于网页弹出窗口的客户端内嵌页交互方法,提高通信的方式和性能,以及提高响应交互性。

解决上述技术问题,本发明提供了一种基于网页弹出窗口的客户端内嵌页交互方法,包括如下步骤:

建立一解释器,用以重载before和after接口,并响应和控制解析过程,

通过webkit组件中一个网页即将弹出窗口时的回调,传入标题和/或窗口文本信息;

当与所述客户端通信时,通过主动弹出一个窗口,并把该窗口的信息配置为按照设定规则编写的文本信息;

在所述客户端检查所述文本信息中的特殊字符串,完成解析后实现交互。

更进一步,所述before接口具体为:

onbeforeanalysishtml();//

用以支持重载的在解析之前调用的接口。

更进一步,所述after接口具体为:

onafteranalysishtml();//

用以支持重载的在解析之后调用的接口。

更进一步,所述按照设定规则编写的文本信息具体包括:

{特定开头+json字符串}。

更进一步,所述网页即将弹出窗口时的回调具体包括:

boolonjsdialog(cefrefptr<cefbrowser>browser,

当onjsdialog的回调被触发时,则所述客户端去检查传入的文本信息。

更进一步,方法还包括:

根据回调的返回值决定是否弹出所述窗口,

并将该回调的返回值置为false,用以取消这个弹出窗口。

更进一步,所述客户端内嵌页为:嵌入html格式的代码。

更进一步,网页开发者通过主动弹出一个窗口向所述客户端传递消息。

更进一步,所述解释器用以解析,从设定url获取的html、javascript或者css的内容。

基于上述,本发明还提供了一种基于网页弹出窗口的客户端内嵌页交互系统,包括:

解释单元,用以建立一解释器,用以重载before和after接口,并响应和控制解析过程,

回调单元,用以通过webkit组件中一个网页即将弹出窗口时的回调,传入标题和/或窗口文本信息;

以及,在当与所述客户端通信时,通过主动弹出一个窗口,并把该窗口的信息配置为按照设定规则编写的文本信息;

在所述客户端检查所述文本信息中的特殊字符串,完成解析

本发明的有益效果:

在本发明中的方法,由于包括步骤:建立一解释器,用以重载before和after接口,并响应和控制解析过程,二次开发的人员,不需要改变整个解释过程,只需要重载before和after接口就足以响应和控制上述的解析过程。

由于还包括步骤:通过webkit组件中一个网页即将弹出窗口时的回调,传入标题和/或窗口文本信息;当与所述客户端通信时,通过主动弹出一个窗口,并把该窗口的信息配置为按照设定规则编写的文本信息;在所述客户端检查所述文本信息中的特殊字符串,完成解析。在webkit组件的回调函数中,想要被弹出的窗口会传入标题、窗口文本信息,并根据回调返回值决定是否真正的弹出这个窗口。而当onjsdialog的回调被触发时,客户端会去检查传入的文本信息,若发现文本是由特定字符串开头的话,就把后面的字符串按json解析,从而知道网页想要传达的是什么信息。

附图说明

图1是本发明一实施例中的方法流程示意图;

图2是本发明一实施例中的系统结构示意图;

图3是图2中的交互过程时序示意图。

具体实施方式

现在将参考一些示例实施例描述本公开的原理。可以理解,这些实施例仅出于说明并且帮助本领域的技术人员理解和实施例本公开的目的而描述,而非建议对本公开的范围的任何限制。在此描述的本公开的内容可以以下文描述的方式之外的各种方式实施。

如本文中所述,术语“包括”及其各种变体可以被理解为开放式术语,其意味着“包括但不限于”。术语“基于”可以被理解为“至少部分地基于”。术语“一个实施例”可以被理解为“至少一个实施例”。术语“另一实施例”可以被理解为“至少一个其它实施例”。

在本申请中的浏览器作为网页的展示工具早已深入人心,实际上浏览器的对网页的渲染就是一个解析过程,浏览器从指定的url获取到全部的内容,包括html、javascript、css等等,根据这些内容按照相应的解释方式,在窗口上绘制出相应的内容。浏览器作为一个解析者和渲染者,对于html代码想要进行的操作能够全权控制。

在本申请中的浏览器实现是个庞大的工程,需要支持全部的网页技术特性并且进行正确的、高效的渲染和交互,从互联网诞生至今,几大厂商之间的长久竞争之下,现在主流的就是两套技术方案,一套是ie内核的,一套就是webkit。而ie内核有版本众多,而且特性不一的缺点,正在被逐渐淘汰,所以一旦考虑到内嵌网页技术,一般都是使用webkit组件。

图1是本发明一实施例中的方法流程示意图,在本实施例中的一种基于网页弹出窗口的客户端内嵌页交互方法,包括如下步骤:

s1建立一解释器,用以重载before和after接口,并响应和控制解析过程,

s2通过webkit组件中一个网页即将弹出窗口时的回调,传入标题和/或窗口文本信息;

s3当与所述客户端通信时,通过主动弹出一个窗口,并把该窗口的信息配置为按照设定规则编写的文本信息;

s4在所述客户端检查所述文本信息中的特殊字符串,完成解析。

上述特定开头包括但不限于,up://。

特定字符串包括但不限于,up://+json业务字符串。

在上述步骤s1中,解析器的伪代码形式如下:

onbeforeanalysishtml();//一个支持重载的在解析之前调用的接口

ret=analysishtml();//解析html代码

if(ret==type_text)//如果解析结果是文本

drawtext(ret);//则绘制文本

onafteranalysishtml();//一个支持重载的在解析之后调用的接口

通过上述解析器,二次开发的人员,不需要改变整个解释过程,只需要重载before和after接口就足以响应和控制这个过程了,如果想要控制的更为精准。

在上述步骤s2中,以webkit组件为列,在webkit组件中,任何一个在javascript代码里想要弹出的窗口,都会触发如下回调:

boolonjsdialog(cefrefptr<cefbrowser>browser,

constcefstring&origin_url,

cosntcefstring&accept_lang,

jsdialogtypedialog_type,

constcefstring&message_text,

constcefstring&default_prompt_text,

cefrefptr<cefjsdialogcallback>callback,

bool&suppress_message

)

在上述的回调中,想要被弹出的窗口会传入标题、窗口文本信息,并根据回调返回值决定是否真正的弹出这个窗口。

作为本实施例中的优选,所述before接口具体为:

onbeforeanalysishtml();//

用以支持重载的在解析之前调用的接口。

作为本实施例中的优选,所述after接口具体为:

onafteranalysishtml();//

用以支持重载的在解析之后调用的接口。

作为本实施例中的优选,所述按照设定规则编写的文本信息具体包括:

{特定开头+json字符串}。

作为本实施例中的优选,所述网页即将弹出窗口时的回调具体包括:

boolonjsdialog(cefrefptr<cefbrowser>browser,

当onjsdialog的回调被触发时,则所述客户端去检查传入的文本信息。

作为本实施例中的优选,方法还包括:

根据回调的返回值决定是否弹出所述窗口,

并将该回调的返回值置为false,用以取消这个弹出窗口。

在一些实施例中,所述客户端内嵌页为:嵌入html格式的代码。

在一些实施例中,网页开发者通过主动弹出一个窗口向所述客户端传递消息。

在一些实施例中,所述解释器用以解析,从设定url获取的html、javascript或者css的内容。

通过上述上述步骤s1,二次开发的人员,不需要改变整个解释过程,只需要重载before和after接口就足以响应和控制上述的解析过程。

通过上述上述步骤s2,在webkit组件的回调函数中,想要被弹出的窗口会传入标题、窗口文本信息,并根据回调返回值决定是否真正的弹出这个窗口。而当onjsdialog的回调被触发时,客户端会去检查传入的文本信息,若发现文本是由特定字符串开头的话,就把后面的字符串按json解析,从而知道网页想要传达的是什么信息。

请参考图2是本发明一实施例中的系统结构示意图,请参考图3是图2中的交互过程时序示意图,本实施例中的一种基于网页弹出窗口的客户端内嵌页交互系统,包括:

解释单元100,用以建立一解释器,用以重载before和after接口,并响应和控制解析过程,

回调单元200,用以通过webkit组件中一个网页即将弹出窗口时的回调,传入标题和/或窗口文本信息;

以及,在当与所述客户端通信时,通过主动弹出一个窗口,并把该窗口的信息配置为按照设定规则编写的文本信息;

在所述客户端检查所述文本信息中的特殊字符串,完成解析。

比如一个最简单的场景,html代码想在网页正中显示一串文本,假如我们自己来实现解释器的话,整个过程可能如下:

ret=analysishtml();//解析html代码

if(ret==type_text)//如果解析结果是文本

drawtext(ret);//则绘制文本

作为解释器的开发者,希望二次利用开发者的代码的后续开发者能够充分控制这个过程但又不会破坏我们的代码结构的话(这实际上就是面向对象开发的本质特性--封装与继承),则在本实施例中可能会将如上代码改写成:

onbeforeanalysishtml();//一个支持重载的在解析之前调用的接口

ret=analysishtml();//解析html代码

if(ret==type_text)//如果解析结果是文本

drawtext(ret);//则绘制文本

onafteranalysishtml();//一个支持重载的在解析之后调用的接口

这样一来,二次开发的人员不需要改变整个解释过程,只需要重载before和after接口就足以响应和控制这个过程了,如果想要控制的更为精准,甚至可以把analysishtml和drawtext两个方法也声明为接口并向外暴露,这样后继者甚至可以更改解释和绘制的过程了。但实际上作为解释器的开发者而言,不会把这些接口提供的这么多这么全,如果想要达到这么入微级的控制,接口可能需要暴露成千上万个,这对于开发者和二次开发者而言都是极大的负担,更重要的是没有必要,绝大多数场景采用默认实现就够了。

本实施例中采用webkit组件进行内嵌网页实现,webkit组件提供了不少解释和渲染过程中的回调,我们这里采用的是一个网页即将弹出窗口时的回调,在webkit组件中,任何一个在javascript代码里想要弹出的窗口,都会触发如下回调:

boolonjsdialog(cefrefptr<cefbrowser>browser,

constcefstring&origin_url,

cosntcefstring&accept_lang,

jsdialogtypedialog_type,

constcefstring&message_text,

constcefstring&default_prompt_text,

cefrefptr<cefjsdialogcallback>callback,

bool&suppress_message

)

在上述的回调中,想要被弹出的窗口会传入标题、窗口文本信息,并根据回调返回值决定是否真正的弹出这个窗口。

在本实施例中,如果网页的开发者希望通知客户端某些信息时,就主动弹出一个窗口,并把窗口的信息置为按照特定规则编写的文本信息,在这里我们采用的是特定开头加json字符串的方式,因为json字符串可以传递任意类型的参数。

在本实施例中,当onjsdialog的回调被触发时,客户端会去检查传入的文本信息,一旦发现文本是由特定字符串开头的话,就把后面的字符串按json解析,从而知道网页想要传达的是什么信息,触发接下来的处理,同时将该回调的返回值置为false,取消这个弹出窗口,因为这个弹出窗口只是用来传递信息,不是真正的想要弹出一个窗口。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

总体而言,本公开的各种实施例可以以硬件或专用电路、软件、逻辑或其任意组合实施。一些方面可以以硬件实施,而其它一些方面可以以固件或软件实施,该固件或软件可以由控制器、微处理器或其它计算设备执行。虽然本公开的各种方面被示出和描述为框图、流程图或使用其它一些绘图表示,但是可以理解本文描述的框、设备、系统、技术或方法可以以非限制性的方式以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其它计算设备或其一些组合实施。

此外,虽然操作以特定顺序描述,但是这不应被理解为要求这类操作以所示的顺序执行或是以顺序序列执行,或是要求所有所示的操作被执行以实现期望结果。在一些情形下,多任务或并行处理可以是有利的。类似地,虽然若干具体实现方式的细节在上面的讨论中被包含,但是这些不应被解释为对本公开的范围的任何限制,而是特征的描述仅是针对具体实施例。在分离的一些实施例中描述的某些特征也可以在单个实施例中组合地执行。相反对,在单个实施例中描述的各种特征也可以在多个实施例中分离地实施或是以任何合适的子组合的方式实施。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1