一种扩展浏览器功能的方法及浏览器系统的制作方法

文档序号:6486856阅读:211来源:国知局
一种扩展浏览器功能的方法及浏览器系统的制作方法
【专利摘要】本发明提供了一种扩展浏览器功能的方法及浏览器系统,其中该方法包括:A.浏览器的脚本引擎模块解析页面脚本,在解析过程中确定所述页面脚本中待创建的非原生脚本实例;B.所述脚本代理模块根据预设的插件描述文件中的映射关系创建Java类实例,并根据所述Java类实例创建所述待创建的非原生脚本实例;C.当所述脚本引擎模块在解析过程中调用已创建的非原生脚本实例时,触发所述脚本代理模块调用与所述已创建的非原生脚本实例对应的Java类实例。通过上述方式,能够实现一种新的浏览器插件机制,大大增加可用插件数量。
【专利说明】一种扩展浏览器功能的方法及浏览器系统
【【技术领域】】
[0001]本发明涉及浏览器插件实现技术,特别涉及一种扩展浏览器功能的方法及浏览器系统。
【【背景技术】】
[0002]浏览器插件是对浏览器的功能进行扩展的应用。现有的浏览器插件实现技术(即对浏览器进行功能扩展的技术)主要包括以下三类:基于IE平台的ActiveX技术、可以跨浏览器平台的NPAPI技术以及在支持JAVA的浏览器上实现的Applet技术。下面对这三种浏览器插件实现技术进行相应的介绍。
[0003]UActiveX是微软的WINDOWS平台上的专有技术。它使用C0M(Component ObjectModel,部件对象模型)技术,使得软件部件(即组件及组件的主控程序)在网络环境中可以进行交互。COM技术是一种跨应用和语言共享二进制代码的方法,定义了不同应用在二进制级别上进行交互的标准,由于ActiveX插件与浏览器满足这样的标准,因此ActiveX插件只要以DLL (Dynamic Link Library,动态链接库)的形式注册至注册表,就可以供浏览器调用。具体地,浏览器加载ActiveX插件的过程请参考图1和图2。
[0004]图1为现有技术使用ActiveX插件时,网页源文件的编写范例示意图。从图1中可以看出,要使用ActiveX插件,在HTML文档中需要使用OBJECT标签进行标识,在该标签的属性中,还标识了 ActiveX插件在注册表中的⑶ID(Globally Unique Identifier,全球唯一标识符)。图2为现有技术的ActiveX插件的加载过程示意图。如图2所示,首先在浏览器加载HTML页面时,进行DOM (文档对象模型)转换,在这个过程中发现OBJECT标签,便会从注册表中查找如图1中的OBJECT标签属性中指定的⑶ID对应的ActiveX插件,以得到相应ActiveX插件的位置,根据该位置,浏览器就可以将对应的ActiveX插件加载到内存并运行,实现相应的功能。
[0005]2、NPAPI是Netscape公司提出的一种浏览器插件技术。它是类似ActiveX的插件技术,但是它定义了一个跨浏览器的插件开发标准,满足NPAPI标准的浏览器插件能够在多种浏览器(如Firefox、Chrome、Safar1、Opera等)上被调用。常用的FLASH播放器、支付宝安全控件都是使用NPAPI技术开发的插件。
[0006]请参考图3,图3为现有技术的NPAPI插件的加载过程的示意图。当浏览器启动时,加载默认路径下的插件类型的文件,并初始化插件环境(将各插件相应地注册到浏览器中),在初始化中,按照NPAPI的标准,插件和浏览器会分别调用对方提供的函数传递信息,同时浏览器获取插件中的信息,以将插件注册至浏览器中。页面加载时,在DOM解析的过程中发现如图4所示的标签,浏览器将判断注册插件中是否存在与图4所示的MimeType类型一致的插件,如果存在,则创建该插件的实例,以提供相应的功能实现浏览器功能的扩展。当页面销毁时,之前在页面上创建的插件实例相应也会被销毁,当浏览器关闭时,将退出插件环境。
[0007]3、Applet是用Java语言编写的小应用程序作为插件的技术,这些程序直接嵌入到页面中,由支持Java的浏览器解释执行,从而实现扩展浏览器功能的目的。
[0008]请参考图5,图5为现有技术使用Applet插件的页面源文件的示意图。对应着该页面,Applet的加载过程如下:浏览器加载页面,在进行DOM解析时发现Appplet标签,则在Applet标签定义的路径(X)下根据类名称(Y)找到相应的applet类,并使用Java虚拟机对该类进行解释执行,以实现该Applet的相应功能。
[0009]由以上三种现有技术看,存在的问题是:(I)在ActiveX和NPAPI的方式下,开发浏览器插件均需要满足特定的通讯标准,这使得插件开发的难度加大,从而影响了可使用的插件数量;(2)以上三种方法均需要在待加载的页面源文件中用专门的标签进行标记,才能实现相应插件的调用;(3)以上三种方法在加载浏览器插件时,都需要为插件指定显示区域(可从各方法下对应的源文件标签中的“width ”和“height ”属性看出);

【发明内容】

[0010]本发明所要解决的技术问题是提供一种扩展浏览器功能的方法及浏览器系统,以实现一种新的浏览器插件机制,以解决现有技术中插件开发和使用复杂,并导致可用的插件数量少的缺陷。
[0011]本发明为解决技术问题而采用的技术方案是提供一种扩展浏览器功能的方法,包括:A.浏览器的脚本引擎模块解析页面脚本,在解析过程中确定所述页面脚本中待创建的非原生脚本实例,并将所述待创建的非原生脚本实例的标识发送给浏览器的脚本代理模块所述脚本代理模块根据预设的插件描述文件中的映射关系创建与所述标识对应的Java类实例,并根据所述Java类实例创建所述待创建的非原生脚本实例;C.当所述脚本引擎模块在解析过程中调用已创建的非原生脚 本实例的方法时,触发所述脚本代理模块调用与所述已创建的非原生脚本实例对应的Java类实例的相应方法并将调用结果返回至所述脚本引擎模块。
[0012]根据本发明之一优选实施例,确定所述页面脚本中待创建的非原生脚本实例的步骤具体包括:判断所述页面脚本中的引用所指对象在内存中是否存在,如果否,则确定该引用所指对象为待创建的非原生脚本实例;或者,通过所述页面脚本中表征创建动作的关键字确定待创建的脚本实例,并判断所述待创建的脚本实例所属类是否在所述页面脚本中被定义,如果否,则确定所述待创建的脚本实例为待创建的非原生脚本实例。
[0013]根据本发明之一优选实施例,所述映射关系的属性包括:第一属性以及第二属性,其中所述第一属性用于描述非原生脚本实例的名称或非原生脚本实例所属类的名称,所述第二属性用于描述与所述第一属性对应的Java类的名称。
[0014]根据本发明之一优选实施例,所述映射关系的属性还包括:第三属性,其中所述第三属性用于描述依据该映射关系产生的对象的有效期间。
[0015]根据本发明之一优选实施例,所述第三属性的属性值包括:在一个页面加载至销毁期间有效的页面属性值、在一个浏览器加载至关闭期间有效的会话属性值、或与一个服务器交互期间有效的域属性值。
[0016]根据本发明之一优选实施例,所述脚本代理模块创建所述Java类实例的步骤具体包括:所述脚本代理模块确定各映射关系中第一属性的属性值与所述标识相匹配的映射关系,并创建由该映射关系中第二属性的属性值指定的Java类的实例。[0017]根据本发明之一优选实施例,所述标识包括所述待创建的非原生脚本实例的名称,或者,所述待创建的非原生脚本实例所属类的名称。
[0018]根据本发明之一优选实施例,根据所述Java类实例创建所述待创建的非原生脚本实例的步骤具体包括:根据所述Java类实例的属性和方法确定所述待创建的非原生脚本实例的定义,并根据该定义创建所述待创建的非原生脚本实例。
[0019]根据本发明之一优选实施例,所述方法在所述步骤A前进一步包括:所述脚本代理模块确定所述插件描述文件中第三属性值为会话属性值的映射关系,并创建该映射关系指定的Java类实例及与该Java类实例对应的非原生脚本实例。
[0020]根据本发明之一优选实施例,所述相应方法为与调用的非原生脚本实例的方法具有相同名称的方法。
[0021]本发明还提供了一种浏览器系统,包括脚本引擎模块和脚本代理模块,其特征在于,所述脚本引擎模块包括:解析单元,用于解析页面脚本;检测单元,用于在所述解析单元解析过程中确定所述页面脚本中待创建的非原生脚本实例,并将所述待创建的非原生脚本实例的标识发送给浏览器的脚本代理模块;所述脚本代理模块包括:执行单元、第一创建单元和第二创建单元;所述第一创建单元,用于根据预设的插件描述文件中的映射关系创建与所述标识对应的Java类实例;所述第二创建单元,用于根据所述Java类实例创建所述待创建的非原生脚本实例;所述解析单元还用于在解析过程中调用已创建的非原生脚本实例的方法时,触发所述执行单元运行,其中所述执行单元用于调用与所述已创建的非原生脚本实例对应的Java类实例的相应方法并将调用结果返回至所述解析单元。
[0022]根据本发明之一优选实施例,所述检测单元确定所述页面脚本中待创建的非原生脚本实例的方式具体包括:所述检测单元判断所述页面脚本中的引用所指对象在内存中是否存在,如果否,则确定该引用所指对象为待创建的非原生脚本实例;或者,所述检测单元通过所述页面脚本中表征创建动作的关键字确定待创建的脚本实例,并判断所述待创建的脚本实例所属类是否在所述页面脚本中被定义,如果否,则确定所述待创建的脚本实例为待创建的非原生脚本实例。
[0023]根据本发明之一优选实施例,所述映射关系的属性包括:第一属性以及第二属性,其中所述第一属性用于描述非原生脚本实例的名称或非原生脚本实例所属类的名称,所述第二属性用于描述与所述第一属性对应的Java类的名称。
[0024]根据本发明之一优选实施例,所述映射关系的属性还包括:第三属性,其中所述第三属性用于描述依据该映射关系产生的对象的有效期间。
[0025]根据本发明之一优选实施例,所述第三属性的属性值包括:在一个页面加载至销毁期间有效的页面属性值、在一个浏览器加载至关闭期间有效的会话属性值、或与一个服务器交互期间有效的域属性值。
[0026]根据本发明之一优选实施例,所述第一创建单元创建所述Java类实例的方式具体包括:所述第一创建单元确定各映射关系中第一属性的属性值与所述标识相匹配的映射关系,并创建由该映射关系中第二属性的属性值指定的Java类的实例。
[0027]根据本发明之一优选实施例,所述标识包括所述待创建的非原生脚本实例的名称,或者,所述待创建的非原生脚本实例所属类的名称。
[0028]根据本发明之一优选实施例,所述第二创建单元创建所述待创建的非原生脚本实例的方式具体包括:所述第二创建单元根据所述Java类实例的属性和方法确定所述待创建的非原生脚本实例的定义,并根据该定义创建所述待创建的非原生脚本实例。[0029]根据本发明之一优选实施例,所述脚本代理模块进一步包括:预加载单元,用于在所述解析单元解析页面脚本前,确定所述插件描述文件中第三属性值为会话属性值的映射关系,并创建该映射关系指定的Java类实例及与该Java类实例对应的非原生脚本实例。
[0030]根据本发明之一优选实施例,所述相应方法为与调用的非原生脚本实例的方法具有相同名称的方法。
[0031]由以上技术方案可以看出,通过本发明方法,可以取得以下技术效果:(1)可以建立起脚本空间至Java空间的通讯机制,不需要再专门开发满足某种通讯协议的插件来进行浏览器扩展,而是可以利用现有的已实现各种功能的Java类,来扩展浏览器的功能,从而使得大量已存在的Java类可以作为浏览器插件使用,大大增加了可使用的插件数量。(2)与现有技术相比,本发明既不需要在页面的源文件中用专门的标签进行标注,也不需要为插件指定显示区域,从而让插件的使用变得更加灵活。
【【专利附图】

【附图说明】】
[0032]图1为现有技术使用ActiveX插件时,网页源文件的编与范例不意图;
[0033]图2为现有技术的ActiveX插件的加载过程示意图;
[0034]图3为现有技术的NPAPI插件的加载过程示意图;
[0035]图4为现有技术使用NPAPI插件时,网页源文件的编与范例不意图;
[0036]图5为现有技术使用Applet插件的页面源文件的示意图;
[0037]图6为本发明扩展浏览器功能的方法的实施例的流程示意图;
[0038]图7为本发明中浏览器系统的实施例的结构示意框图。
【【具体实施方式】】
[0039]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0040]本说明书中的脚本举例中均采用JavaScript脚本进行,但是应该理解,本发明方法中的脚本不应仅限于此。
[0041]在本发明中,浏览器包括了脚本引擎模块和脚本代理模块。其中脚本引擎模块,用于与脚本交互,并根据交互情况,完成与脚本代理模块之间的通讯。脚本代理模块,用于根据脚本引擎传递的信息,执行相关动作。下面将通过具体实施例对上述过程进行介绍。
[0042]请参考图6,图6为本发明扩展浏览器功能的方法的实施例的流程示意图,如图6所示,本发明的方法主要包括以下步骤:
[0043]S1、浏览器的脚本引擎模块解析页面脚本,在解析过程中确定页面脚本中待创建的非原生脚本实例,并将待创建的非原生脚本实例的标识发送给浏览器的脚本代理模块。
[0044]S2、脚本代理模块根据预设的插件描述文件中的映射关系创建与上述标识对应的Java类实例,并根据该Java类实例创建上述待创建的非原生脚本实例。
[0045]S3、当脚本引擎模块在解析过程中调用已创建的非原生脚本实例的方法时,触发脚本代理模块调用与已创建的非原生脚本实例对应的Java类实例的相应方法并将调用结果返回至脚本引擎模块。
[0046]下面对上述步骤进行具体说明。
[0047]步骤SI中,浏览器在加载一个页面时,脚本引擎模块对该页面中的脚本进行解析,在解析过程中确定页面中待创建的非原生脚本实例。非原生脚本实例指的是仅通过页面脚本中的定义,无法创建的脚本实例。具体地,确定待创建的非原生脚本实例的步骤包括:
[0048]判断页面脚本中的引用所指对象在内存中是否存在,如果该引用所指对象在内存中不存在,则确定该引用所指对象为待创建的非原生脚本实例。
[0049]请参考代码块1:
[0050]〈script language = ^Javascript 丨丨 >
[0051]alert (ExtCalendar.now ()) ;(I)
[0052]</script)
[0053]假设代码块I中引用“ExtCalendar”所指对象在内存中不存在,则认为“ExtCalendar”所指对象为待创建的非原生脚本实例。
[0054]此外,确定页面脚本中待创建的非原生脚本实例的实施方式还包括:通过页面脚本中表征创建动作的关键字确定待创建的脚本实例,并判断待创建的脚本实例所属类是否在页面脚本中被定义,如果否,则确定待创建的脚本实例为待创建的非原生脚本实例。
[0055]请参考代码块2:
[0056]
<script language='Javasaipf' >
var mailer = new Ma1.ler();
var content = ”这是一封电子邮件的正文部分”;(2)
mailer.send("test@test.com","标题”,content);
</script〉
[0057]代码块2中通过“new”关键字(即表征创建动作的关键字)欲创建脚本实例“mailer”,如果其所属类Mailer在页面脚本中均无定义,则认为“mailer”为待创建的非原生脚本实例。
[0058]步骤SI中,脚本引擎模块在确定待创建的非原生脚本实例后,将该待创建的非原生脚本实例标识发送至脚本代理模块,这样在步骤S2中,脚本代理模块就能根据该标识找到相应的映射关系,从而根据相应的映射关系创建对应的Java类实例和非原生脚本实例。
[0059]具体地,步骤S2中,脚本代理模块读取插件描述文件,以步骤SI中发送过来的非原生脚本实例的标识作为关键字,在插件描述文件中查找匹配的映射关系。
[0060]根据前面所列举的代码块I和代码块2中的内容可以理解,步骤SI中发送的非原生脚本实例的标识,既可以是该非原生脚本实例的名称(如代码块I中的“ExtCalendar”),也可以是该非原生脚本实例所属类的名称(如代码块2中的“Mailer”)。与之对应的,插件描述文件中的一个映射关系的属性,包括了第一属性和第二属性,其中第一属性用于描述非原生脚本实例的名称或非原生脚本实例所属类的名称,第二属性用于描述与第一属性对应的Java类的名称。
[0061]请参考代码块3,代码块3为插件描述文件中的映射关系的示意代码:
[0062]
<plugin>
〈class Iiame=i1Maiier" java_ciass="com.plugin.mailer" lifecycle="page"> i 3 )〈instance name="ExtCalendar" java_class="com.plugin.extcalendar"
I i fee y c I e=" sess i on" >
</pliigin>
[0063]上述代码第二行的映射关系中的第一属性描述了非原生脚本实例所属类的名称(class name),第二属性描述了对应的Java类的名称(java class);第三四行的映射关系中的第一属性描述了非原生脚本实例的名称(instance name),第二属性描述了对应的Java类的名称。
[0064]步骤S2中,脚本代理模块创建与待创建的非原生脚本实例的标识对应的Java类实例的步骤具体包括:
[0065]确定各映射关系中第一属性的属性值与待创建的非原生脚本实例的标识相匹配的映射关系,并创建由该映射关系中第二属性的属性值指定的Java类的实例。
[0066]由于待创建的非原生脚本实例的标识既可以是该实例的名称也可以是该实例所属类的名称,步骤S2中在确定匹配的映射关系时,只需要利用步骤SI发送过来的标识在各映射关系的第一属性值中进行匹配查找即可。
[0067]例如步骤SI中发送过来的非原生脚本实例的标识为“Mailer”,在代码块3的第二行映射关系中第一属性的属性值“Mailer”与之匹配,则通过这行映射关系,可以确定对应的Java类为“com.plugin, mailer”,利用该类的类文件,就可以创建相应的Java类实例。上述的类文件,可以存放在默认路径下,也可以在映射关系中添加一个新的属性用于表征Java类文件的存放位置(代码块3中未示出),如果映射关系中包含这样的一个属性,则在创建相应的Java类时,到该属性值指定的位置去获取类文件以创建相应的Java类实例。
[0068]在创建了 Java类实例后,步骤S2中脚本代理模块会将该Java类实例包装为非原生脚本实例,也就是根据该Java类实例创建前面步骤SI中确定的待创建的非原生脚本实例。通过这个步骤,Java空间与脚本空间就建立了交互机制,从而能够在后续步骤中实现从脚本空间的调用到Java空间调用。具体地,根据Java类实例创建步骤SI中确定的待创建的非原生脚本实例的步骤包括:根据该Java类实例的属性和方法确定待创建的非原生脚本实例的定义,并根据该定义创建该非原生脚本实例。在待创建的非原生脚本实例的定义中,确定了该非原生脚本实例具有与对应的已创建的Java类实例相同的属性和方法,这样,后续步骤中在脚本空间的调用就能正确映射到Java空间的调用上来。这里描述的相同属性和方法,是实质上相同而不仅限于名字相同,例如,如果插件描述文件中对Java类实例的方法和非原生脚本实例的方法的对应关系进行了描述,则应按照这种描述来确定相同方法。例如已创建的Java类实例A拥有一个“read”方法,假设映射关系中有下列两个属性:<......java_m=read, instance_m=readme......>
[0069]那么则应该理解,待创建的非原生脚本实例与已创建的A的相同方法的方法名应该为readme,而不是read。
[0070]作为一种优选的实施方式,本发明不描述Java实例和非原生脚本实例的方法和属性之间的对应关系,而是默认两者之间以相同的名称进行映射。
[0071]根据上述描述,应该理解,在步骤S3中描述的“调用与已创建的非原生脚本实例对应的Java类实例的相应方法”,其中的相应方法,在插件描述文件中存在Java类实例与非原生脚本实例的方法之间的对应关系描述时,可以是该对应关系中确定的方法。作为优选的实施方式,由于插件描述文件中不对Java类实例和非原生脚本实例的方法之间的对应关系进行描述,所以相应方法就是Java类实例的、与调用的非原生脚本实例的方法具有相同名称的方法。例如脚本引擎模块调用的非原生脚本实例的方法为“now”方法,则触发脚本代理模块调用对应Java类实例的“now”方法。
[0072]步骤S3中,由于Java的反射机制使得运行时任意调用一个Java类实例的方法成为可能,因此在本领域技术人员可以理解的范围内,上述调用机制不难实现,本说明书对此不做赘述。
[0073]从代码块3中还可以看出,映射关系的属性中还可以包括第三属性(lifecycle),其中该属性用于描述依据该映射关系产生的对象的有效期间。第三属性的属性值可以是在一个页面加载至销毁期间有效的页面属性值、在一个浏览器加载至关闭期间有效的会话属性值、或与一个服务器交互期间有效的域属性值。在代码块3第二行的映射关系中,第三属性值“page”表示的就是页面属性值,第三四行的映射关系中,第三属性值“session”表示的就是会话属性值。
[0074]在第三属性定义的有效期间内,根据对应映射关系产生的Java类实例和非原生脚本实例会一直存在,例如会话属性值的对象(Java类实例和非原生脚本实例),一旦创建,则在浏览器关闭前均有效,直到浏览器关闭才被销毁,而页面属性值的对象,在当前页面被关闭时就会被销毁。
[0075]由于会话属性值的对象与页面的生命周期无关,可以在页面加载前即先创建,以在页面加载时直接调用,因此,本发明还可以在步骤SI前进一步包括:
[0076]脚本代理模块确定插件描述文件中第三属性值为会话属性值的映射关系,并创建该映射关系指定的Java类实例及与该Java类实例对应的非原生脚本实例。
[0077]请参考图7,图7为本发明中的浏览器系统的实施例的结构示意框图。如图7所示,该系统包括:脚本引擎模块和脚本代理模块,其中,脚本引擎模块包括:解析单元201和检测单元202,脚本代理模块包括:第一创建单元301、第二创建单元302及执行单元303。
[0078]解析单元201,用于解析页面脚本。检测单元202,用于在解析单元201解析过程中,确定页面脚本中待创建的非原生脚本实例,并将待创建的非原生脚本实例的标识发送给浏览器的脚本代理模块。
[0079]具体地,检测单元202确定页面脚本中待创建的非原生脚本实例的方式包括:判断页面脚本中引用所指对象在内存中是否存在,如果否,则确定该引用所指对象为待创建的非原生脚本实例;或者,通过页面脚本中表征创建动作的关键字确定待创建的脚本实例,并判断该脚本实例所属类是否在页面脚本中被定义,如果否,则确定该待创建的脚本实例为待创建的非原生脚本实例。
[0080]第一创建单元301,用于根据预设的插件描述文件中的映射关系创建与待创建的非原生脚本实例的标识对应的Java类实例。第二创建单元302,用于根据已创建的Java类实例创建检测单元202确定的待创建的非原生脚本实例。
[0081]上述映射关系的属性包括:第一属性以及第二属性,其中第一属性用于描述非原生脚本实例的名称或非原生脚本实例所属类的名称,第二属性用于描述与第一属性对应的Java类的名称。
[0082]具体地,第一创建单元301创建对应的Java类实例的方式包括:确定各映射关系中第一属性的属性值与待创建的非原生脚本实例的标识相匹配的映射关系,并创建由该映射关系中第二属性的属性值指定的Java类的实例。第二创建单元302创建待创建的非原生脚本实例的方式包括:根据已创建的Java类实例的属性和方法确定待创建的非原生脚本实例的定义,并根据该定义创建该非原生脚本实例。
[0083]解析单元201,还用于在解析过程中调用已创建的非原生脚本实例的方法时,触发执行单元303运行,执行单元303,用于调用与上述已创建的非原生脚本实例对应的Java类实例的相应方法并将调用结果返回至解析单元201。其中相应方法,在一种实施例中就是与解析单元201调用的非原生脚本实例的方法具有相同名称的方法。
[0084]此外,映射关系还可以包括第三属性,其中第三属性用于描述依据该映射关系产生的对象的有效期间。所述第三属性的属性值包括:在一个页面加载至销毁期间有效的页面属性值、在一个浏览器加载至关闭期间有效的会话属性值、或与一个服务器交互期间有效的域属性值。
[0085]与之对应的,本发明的浏览器系统中的脚本代理模块进一步还可包括一预加载单元(图7中未示出),用于在解析单元201解析页面脚本前,确定插件描述文件中第三属性值为会话属性值的映射关系,并创建该映射关系指定的Java类实例及与该Java类实例对应的非原生脚本实例。
[0086]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种扩展浏览器功能的方法,包括: A.浏览器的脚本引擎模块解析页面脚本,在解析过程中确定所述页面脚本中待创建的非原生脚本实例,并将所述待创建的非原生脚本实例的标识发送给浏览器的脚本代理模块; B.所述脚本代理模块根据预设的插件描述文件中的映射关系创建与所述标识对应的Java类实例,并根据所述Java类实例创建所述待创建的非原生脚本实例; C.当所述脚本引擎模块在解析过程中调用已创建的非原生脚本实例的方法时,触发所述脚本代理模块调用与所述已创建的非原生脚本实例对应的Java类实例的相应方法并将调用结果返回至所述脚本引擎模块。
2.根据权利要求1所述的方法,其特征在于,确定所述页面脚本中待创建的非原生脚本实例的步骤具体包括: 判断所述页面脚本中的引用所指对象在内存中是否存在,如果否,则确定该引用所指对象为待创建的非原生脚本实例;或者, 通过所述页面脚本中表征创建动作的关键字确定待创建的脚本实例,并判断所述待创建的脚本实例所属类是否在所述页面脚本中被定义,如果否,则确定所述待创建的脚本实例为待创建的非原生脚本实例。
3.根据权利要求1所述的方法,其特征在于,所述映射关系的属性包括:第一属性以及第二属性,其中所述第一属性用于描述非原生脚本实例的名称或非原生脚本实例所属类的名称,所述第二属性用于描述与所述第一属性对应的Java类的名称。
4.根据权利要求3所述的方法 ,其特征在于,所述映射关系的属性还包括:第三属性,其中所述第三属性用于描述依据该映射关系产生的对象的有效期间。
5.根据权利要求4所述的方法,其特征在于,所述第三属性的属性值包括:在一个页面加载至销毁期间有效的页面属性值、在一个浏览器加载至关闭期间有效的会话属性值、或与一个服务器交互期间有效的域属性值。
6.根据权利要求3所述的方法,其特征在于,所述脚本代理模块创建所述Java类实例的步骤具体包括: 所述脚本代理模块确定各映射关系中第一属性的属性值与所述标识相匹配的映射关系,并创建由该映射关系中第二属性的属性值指定的Java类的实例。
7.根据权利要求1或6所述的方法,所述标识包括所述待创建的非原生脚本实例的名称,或者,所述待创建的非原生脚本实例所属类的名称。
8.根据权利要求6所述的方法,其特征在于,根据所述Java类实例创建所述待创建的非原生脚本实例的步骤具体包括: 根据所述Java类实例的属性和方法确定所述待创建的非原生脚本实例的定义,并根据该定义创建所述待创建的非原生脚本实例。
9.根据权利要求5所述的方法,其特征在于,所述方法在所述步骤A前进一步包括: 所述脚本代理模块确定所述插件描述文件中第三属性值为会话属性值的映射关系,并创建该映射关系指定的Java类实例及与该Java类实例对应的非原生脚本实例。
10.根据权利要求1所述的方法,其特征在于,所述相应方法为与调用的非原生脚本实例的方法具有相同名称的方法。
11.一种浏览器系统,包括脚本引擎模块和脚本代理模块,其特征在于,所述脚本引擎模块包括: 解析单元,用于解析页面脚本; 检测单元,用于在所述解析单元解析过程中确定所述页面脚本中待创建的非原生脚本实例,并将所述待创建的非原生脚本实例的标识发送给浏览器的脚本代理模块; 所述脚本代理模块包括:执行单元、第一创建单元和第二创建单元; 所述第一创建单元,用于根据预设的插件描述文件中的映射关系创建与所述标识对应的Java类实例; 所述第二创建单元,用于根据所述Java类实例创建所述待创建的非原生脚本实例; 所述解析单元还用于在解析过程中调用已创建的非原生脚本实例的方法时,触发所述执行单元运行,其中所述执行单元用于调用与所述已创建的非原生脚本实例对应的Java类实例的相应方法并将调用结果返回至所述解析单元。
12.根据权利要求11所述的系统,其特征在于,所述检测单元确定所述页面脚本中待创建的非原生脚本实例的方式具体包括: 所述检测单元判断所述页面脚本中的引用所指对象在内存中是否存在,如果否,则确定该引用所指对象为待创建的非原生脚本实例;或者, 所述检测单元通过所述页面脚本中表征创建动作的关键字确定待创建的脚本实例,并判断所述待创建的脚本实例所属类是否在所述页面脚本中被定义,如果否,则确定所述待创建的脚本实例为待创建的非原生脚本实例。
13.根据权利要求11所述的系统,其特征在于,所述映射关系的属性包括:第一属性以及第二属性,其中所述第一属性用于描述非原生脚本实例的名称或非原生脚本实例所属类的名称,所述第二属性用于描述与所述第一属性对应的Java类的名称。
14.根据权利要求13所述的系统,其特征在于,所述映射关系的属性还包括:第三属性,其中所述第三属性用于描述依据该映射关系产生的对象的有效期间。
15.根据权利要求14所述的系统,其特征在于,所述第三属性的属性值包括:在一个页面加载至销毁期间有效的页面属性值、在一个浏览器加载至关闭期间有效的会话属性值、或与一个服务器交互期间有效的域属性值。
16.根据权利要求11所述的系统,其特征在于,所述第一创建单元创建所述Java类实例的方式具体包括: 所述第一创建单元确定各映射关系中第一属性的属性值与所述标识相匹配的映射关系,并创建由该映射关系中第二属性的属性值指定的Java类的实例。
17.根据权利要求11或16所述的系统,其特征在于,所述标识包括所述待创建的非原生脚本实例的名称,或者,所述待创建的非原生脚本实例所属类的名称。
18.根据权利要求16所述的系统,其特征在于,所述第二创建单元创建所述待创建的非原生脚本实例的方式具体包括: 所述第二创建单元根据所述Java类实例的属性和方法确定所述待创建的非原生脚本实例的定义,并根据该定义创建所述待创建的非原生脚本实例。
19.根据权利要求15所述的系统,其特征在于,所述脚本代理模块进一步包括: 预加载单元,用于在所述解析单元解析页面脚本前,确定所述插件描述文件中第三属性值为会话属性值的映射关系,并创建该映射关系指定的Java类实例及与该Java类实例对应的非原生脚本实例。
20.根据权利要求11所述的系统,其特征在于,所述相应方法为与调用的非原生脚本实例的方法具有相同名称的方法 。
【文档编号】G06F9/44GK103543991SQ201210237542
【公开日】2014年1月29日 申请日期:2012年7月9日 优先权日:2012年7月9日
【发明者】唐虹刚, 黎科峰 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1