发明内容
鉴于上述现有技术在获取页面可交互时机时,针对不同内核的浏览器不能兼容、效率低下、浪费***资源等问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的用于页面交互的方法与装置。
依据本发明的一个方面,提供了一种用于页面交互的方法,包括:接受页面交互插件的调用指令;判断页面交互插件所在的浏览器使用的浏览器内核的类型;根据浏览器内核的类型,调用相应的交互时机获取接口获取页面交互插件与浏览器的页面进行交互的时机;向页面交互插件通知交互时机获取接口返回的交互时机,以使页面交互插件与浏览器的页面之间进行交互;其中,页面交互插件的调用指令中包括:页面元素参数和回调函数参数,其中,页面元素参数用于指示页面交互插件进行页面交互所需的页面元素,回调函数参数用于指示执行页面交互插件与浏览器的页面之间的交互操作的回调函数。
可选地,根据浏览器内核的类型,调用相应的交互时机获取接口获取页面交互插件与浏览器的页面进行交互的时机的步骤包括:若浏览器内核的类型为trident内核,则调用使用trident内核的浏览器的Behavior接口,并将页面元素参数通知给Behavior接口;接收Behavior接口在确定页面元素参数指示的页面元素加载完成后返回的交互时机;若浏览器内核的类型为webkit内核或者Gecko内核,则调用使用webkit内核或者Gecko内核的浏览器中相应的交互时机获取接口,接收相应的交互时机获取接口返回的DOMContentLoaded事件的触发时机作为页面交互插件与浏览器的页面进行交互的时机。
可选地,向页面交互插件通知交互时机获取接口返回的交互时机,以使页面交互插件与浏览器的页面之间进行交互的步骤包括:在接收到交互时机获取接口返回的交互时机时,调用回调函数参数指示的回调函数,通过回调函数使页面交互插件与浏览器的页面之间进行交互。
可选地,页面交互方法由动态链接库或者浏览器组件实现。
可选地,Behavior接口包括IElementBehavior接口、IElementBehaviorFactory接口和IElementBehaviorSite接口;其中,IElementBehaviorFactory接口用于定位并调用动态链接库或浏览器组件;IElementBehavior接口用于在确定页面元素加载完成后返回交互时机;IElementBehaviorSite接口用于浏览器与动态链接库或浏览器组件之间的通信。
根据本发明的另一方面,提供了一种用于页面交互的装置,包括:第一调用模块,用于接受页面交互插件的调用指令;判断页面交互插件所在的浏览器使用的浏览器内核的类型;第二调用模块,用于根据浏览器内核的类型,调用相应的交互时机获取接口获取页面交互插件与浏览器的页面进行交互的时机;交互模块,用于向页面交互插件通知交互时机获取接口返回的交互时机,以使页面交互插件与浏览器的页面之间进行交互;其中,,页面交互插件的调用指令中包括:页面元素参数和回调函数参数,其中,页面元素参数用于指示页面交互插件进行页面交互所需的页面元素,回调函数参数用于指示执行页面交互插件与浏览器的页面之间的交互操作的回调函数。
可选地,第二调用模块,用于若浏览器内核的类型为trident内核,则调用使用trident内核的浏览器的Behavior接口,并将页面元素参数通知给Behavior接口;接收Behavior接口在确定页面元素参数指示的页面元素加载完成后返回的交互时机;若浏览器内核的类型为webkit内核或者Gecko内核,则调用使用webkit内核或者Gecko内核的浏览器中相应的交互时机获取接口,接收相应的交互时机获取接口返回的DOMContentLoaded事件的触发时机作为页面交互插件与浏览器的页面进行交互的时机。
可选地,交互模块,用于在接收到交互时机获取接口返回的交互时机时,调用回调函数参数指示的回调函数,通过回调函数使页面交互插件与浏览器的页面之间进行交互。
可选地,用于页面交互的装置由动态链接库对应的装置或者浏览器组件对应的装置实现。
可选地,Behavior接口包括IElementBehavior接口、IElementBehaviorFactory接口和IElementBehaviorSite接口;其中,IElementBehaviorFactory接口用于定位并调用动态链接库或浏览器组件;IElementBehavior接口用于在确定页面元素加载完成后返回交互时机;IElementBehaviorSite接口用于浏览器与动态链接库或浏览器组件之间的通信。
本发明的用于页面交互的方案在页面交互插件需要页面可交互时机时,通过统一格式的调用指令,接受页面交互插件的调用,并根据浏览器内核的类型调用与浏览器内核相对应的交互时机获取接口,以获取页面交互插件与浏览器的页面之间进行交互的时机,从而进行页面交互插件和浏览器的页面交互。通过本发明,无须采取轮询机制,通过调用内核中的相应的接口即可获取页面可交互时机,节省了资源,提高了效率,加快了页面可交互时机获取速度;针对不同浏览器内核调用不同的交互时机获取接口,实现了对具有不同浏览器内核的浏览器的兼容;并且,本发明的用于页面交互的方案可以采用统一接口实现,提高了开发人员开发插件的效率,并且速度快,节省***资源。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一
参照图1,示出了根据本发明实施例一的一种用于页面交互的方法的步骤流程图。
本实施例的用于页面交互的方法包括以下步骤:
步骤S102:接受页面交互插件的调用指令。
该调用指令用于调用使用下述方法的接口、函数、文件、或组件,以获取页面交互插件与浏览器的交互时机。
步骤S104:判断页面交互插件所在的浏览器使用的浏览器内核的类型。
步骤S106:根据浏览器内核的类型,调用相应的交互时机获取接口获取页面交互插件与浏览器的页面进行交互的时机。
例如,当浏览器内核的类型为trident内核,则调用浏览器的Behavior接口;当浏览器内核的类型为webkit内核或者Gecko内核,则调用使用webkit内核或者Gecko内核的浏览器中相应的交互时机获取接口等。
步骤S108:向页面交互插件通知交互时机获取接口返回的交互时机,以使页面交互插件与浏览器的页面之间进行交互。
如,可以将获得的交互时机提交给页面交互插件,再由页面交互插件根据该交互时机调用相应的交互接口或函数,进行页面交互插件与浏览器的页面交互,如填表等;也可以由使用本实施例方法的接口、函数、文件、或组件等,在获取到页面交互插件与浏览器的交互时机时,直接调用页面交互插件中的相关接口或函数,使页面交互插件与浏览器页面进行交互。
通过本实施例,在页面交互插件需要页面可交互时机时,通过统一格式的调用指令,本发明的方法接受页面交互插件的调用,并根据浏览器内核的类型调用与浏览器内核的相对应的交互时机获取接口,以获取页面交互插件与浏览器的页面之间进行交互的时机,从而进行页面交互插件和浏览器的页面交互。通过本实施例,无须采取轮询机制,通过调用内核中的相应的接口即可获取页面可交互时机,节省了资源,提高了效率,加快了页面可交互时机获取速度;针对不同浏览器内核调用不同的交互时机获取接口,实现了对具有不同浏览器内核的浏览器的兼容;并且,本实施例的用于页面交互的方案可以采用统一接口实现,提高了开发人员开发插件的效率,并且速度快,节省***资源。
实施例二
参照图2,示出了根据本发明实施例二的一种用于页面交互的方法的步骤流程图。
本实施例中,获取页面交互插件与浏览器交互时机的方法以动态链接库DLL文件(或模块)形式实现,向页面交互插件提供调用接口,但不限于此,本领域技术人员应当明了,在实际应用中,本发明的用于页面交互的方法可以以任意适当形式实现,如浏览器组件形式、嵌入浏览器代码中的形式,等等。
本实施例的用于页面交互的方法包括以下步骤:
步骤S202:浏览器加载使用页面交互插件的网页。
步骤S204:页面交互插件向获取页面可交互时机的DLL文件提供的调用接口发送调用指令。
本实施例中,页面交互插件发送的调用指令包括页面元素参数和回调函数参数。其中,页面元素参数用于指示页面交互插件进行页面交互所需的页面元素(如表单等),回调函数参数用于指示执行页面交互插件与浏览器的页面之间的交互操作的回调函数。该回调函数为页面交互插件自身的函数,负责页面交互插件与浏览器的交互操作,页面交互插件告知DLL文件该回调函数的信息,或者向DLL文件注册该回调函数,以使DLL文件在页面可交互时机到来时,准确调用页面交互插件的该函数与浏览器进行页面交互。
步骤S206:获取页面可交互时机的DLL文件通过调用接口接受页面交互插件的调用指令。
包括接收调用指令中的页面元素参数和回调函数参数。
步骤S208:获取页面可交互时机的DLL文件判断页面交互插件所在的浏览器使用的浏览器内核的类型为trident内核,还是为webkit内核或者Gecko内核,若为trident内核,则执行步骤S210;若为webkit内核或者Gecko内核,则执行步骤S214。
本实施例仅以trident内核,以及webkit内核和Gecko内核为例,其中,trident内核可适用于IE浏览器,webkit内核或者Gecko内核可适用于Chrome浏览器、Safari浏览器、FireFox浏览器等,但本领域技术人员应当明了,上述内核仅为示例性说明,对于其它类型的内核均可参照本实施例,调用相应的浏览器的交互时机获取接口获取页面交互插件与浏览器的交互时机。
步骤S210:浏览器内核的类型为trident内核时,获取页面可交互时机的DLL文件调用使用trident内核的浏览器的Behavior接口,并将页面元素参数通知给Behavior接口。
优选地,本实施例中的Behavior接口包括IElementBehavior接口、IElementBehaviorFactory接口和IElementBehaviorSite接口。其中,IElementBehaviorFactory接口用于定位并调用获取页面可交互时机的DLL文件或者其它实现形式如浏览器组件;IElementBehavior接口用于在确定页面元素加载完成后返回页面交互插件与浏览器的页面可交互时机;IElementBehaviorSite接口用于浏览器与所述DLL文件或者其它实现形式如浏览器组件之间的通信。
步骤S212:获取页面可交互时机的DLL文件接收Behavior接口在确定页面元素参数指示的页面元素加载完成后返回的交互时机,执行步骤S218。
步骤S214:当浏览器内核的类型为webkit内核或者Gecko内核时,获取页面可交互时机的DLL文件调用使用webkit内核或者Gecko内核的浏览器中相应的交互时机获取接口。
很多webkit内核或者Gecko内核的浏览器本身就支持页面可交互时机,具有可获取页面可交互时机的技术手段,如支持DOMContentLoaded事件。
步骤S216:获取页面可交互时机的DLL文件接收相应的交互时机获取接口返回的DOMContentLoaded事件的触发时机作为页面交互插件与浏览器的页面进行交互的时机,执行步骤S218。
其中,webkit内核或者Gecko内核的浏览器在DOM树建立完毕后,触发DOMContentLoaded事件。
步骤S218:获取页面可交互时机的DLL文件向页面交互插件通知交互时机获取接口返回的交互时机,以使页面交互插件与浏览器页面之间进行交互。
例如,获取页面可交互时机的DLL文件在接收到交互时机获取接口返回的交互时机时,调用回调函数参数指示的回调函数(该回调函数属于页面交互插件),通过回调函数使页面交互插件与浏览器的页面之间进行交互。
再例如,获取页面可交互时机的DLL文件接收到交互时机获取接口返回的交互时机,将该交互时机提交给页面交互插件,由页面交互插件自己调用其自身的回调函数,进而页面交互插件与浏览器的页面之间的交互。
通过本实施例,提供了统一的接口以获取页面可交互时机,进而页面交互插件与浏览器页面之间交互,针对不同的浏览器都能兼容,提高了开发人员开发插件的效率,并且速度快,节省***资源。
实施例三
参照图3,示出了根据本发明实施例三的一种用于页面交互的方法的步骤流程图。
本实施例中,接受页面交互插件调用指令,获取页面可交互时机进而调用页面交互插件的函数进行交互的方法被封装为一个整体,这个整体可以是一个DLL文件,也可以是一个浏览器组件,也可以是嵌入浏览器代码中的一个函数,还可以是任意其它适当方式。为便于描述,本实施例中将该整体称为可交互时机获取组件。这个整体对外提供了RegistDOMReady接口,通过该接口接收调用指令和调用指令中的参数,将接收到的参数传递到整体中的处理部分进行处理,获取页面可交互时机,调用页面交互插件中的函数与浏览器页面之间进行交互。
本实施例的用于页面交互的方法包括以下步骤:
步骤S302:当页面交互插件需要与页面进行交互,需要获知页面可交互时机时,发送调用指令,调用可交互时机获取组件的RegistDOMReady接口。
RegistDOMReady接口是可交互时机获取组件对外提供的统一接口,通过该接口无需页面交互插件开发者自己设计获知页面可交互时机,无需考虑浏览器的内核。
RegistDOMReady接口有两个参数:页面元素参数即页面交互插件本身关心的页面元素,回调函数参数即页面交互插件自己注册的回调函数(也就是后文中的OnDomReady函数,该函数由页面交互插件实现,表示页面交互插件在获得页面可交互时机之后要做的事情,比如填表,保存图片等等,具体实现方法可由本领域技术人员参考相关技术实现,在此不再详述)。页面交互插件的调用指令中可以携带这两个参数,RegistDOMReady接口通过接收调用指令获得这两个参数。
步骤S304:接收到页面交互插件的调用指令后,可交互时机获取组件判断打开页面的浏览器内核的类型,若为trident内核,则执行步骤S306;若为webkit或Gecko内核,则执行步骤S308。
步骤S306:如果是trident内核(适用于IE浏览器),则调用Behavior接口获取页面可交互时机,向页面交互插件通知页面可交互时机以使页面交互插件和浏览器页面之间进行交互处理。
本实施例的可交互时机获取组件内部实现了Behavior接口,包括IElementBehavior接口、IElementBehaviorFactory接口、IElementBehaviorSite接口。以上三个接口由微软提供,本实施例只需要实现这些接口提供的方法即可。其中,IElementBehavior接口可以从下文的MSHTML中接收到通知,IElementBehaviorFactory提供了一种标准的机制,供下文的MSHTML可以定位到可交互时机获取组件,IElementBehaviorSite用于提供下文的MSHTML与可交互时机获取组件之间的通信。
在具体实现时,可交互时机获取组件在所有打开的页面头部写入以下CSS样式:
<STYLE>
BODY{behavior:url(#default#BehaviorReady);}
</STYLE>
页面交互插件需要与浏览器页面的什么元素进行交互,就要告诉可交互时机获取组件需要关心什么类型的元素。可交互时机获取组件就会在{behavior:url(#default#BehaviorReady);}前面写上什么元素。如BODY,INPUT,IMG等,这三项分别表示整个HTML页面的BODY元素,输入元素,图像元素。
以下以BODY为例,对可交互时机获取组件进行说明。
当MSHTML(IE内部的页面解析、渲染引擎)在解析页面发现上述CSS样式后,会到Software\Microsoft\Internet Explorer\Default Behavior找到可交互时机获取组件注册的COM对象,并加载起来。
当HTML的BODY标签解析完成后,可交互时机获取组件可以通过IElementBehavior接口收到BEHAVIOREVENT_CONTENTREADY事件,该事件标识着该HTML的BODY部分解析完成,也意味着页面可交互时机的到来。可交互时机获取组件回调页面交互插件之前注册的回调函数,由页面可交互插件进行后续的交互处理。
步骤S308:如果是webkit内核或Gecko内核(适用于Chrome浏览器,Safari浏览器和FireFox浏览器(Gecko内核)),则可交互时机获取组件调用可以返回页面可交互时机的接口,在DOMContentLoaded事件触发时调用回调函数,进行页面交互插件和浏览器页面的交互处理。
webkit内核或Gecko内核原生支持页面可交互时机。也就是DomContentLoaded事件到来的时机。
页面交互插件调用可交互时机获取组件提供的RegistDOMReady接口,传递页面元素参数即插件本身关心的页面元素,和回调函数参数即插件自己注册的回调函数。因webkit内核或Gecko内核本来就支持页面可交互时机,也就是支持DOMContentLoaded事件,可交互时机获取组件只需要在该事件到来时调用页面交互插件之前注册的回调函数即可实现页面交互插件和浏览器页面的交互。
本实施例中,以页面交互插件的回调函数为OnDOMReady函数为例,页面交互插件首先调用可交互时机获取组件,告诉可交互时机获取组件需要获得页面可交互时机,并且将自己的OnDomReady函数注册到可交互时机获取组件上。当可交互时机获取组件获知相应事件(如DOMContentLoaded事件或者BEHAVIOREVENT_CONTENTREADY事件)的触发,由此得知页面可交互时机,回调页面交互插件的对应函数,本实施例中为页面交互插件的OnDOMReady函数,从而实现页面交互,如通过OnDOMReady函数进行填表操作,或者进行保存图片操作等。
例如,当登录管家插件想要知道页面可交互时机,则调用本实施例的可交互时机获取组件的RegistDOMReady函数,并将OnDOMReady函数注册上(OnDOMReady函数由登录管家插件自身实现);可交互时机获取组件根据浏览器使用的是trident内核还是webkit内核来使用不同的接口获得页面可交互时机;当页面可交互时机到来时,可交互时机获取组件调用登录管家插件的OnDOMReady函数;登录管家的OnDOMReady函数用于实现填表等操作,当页面可交互时机到来时,执行OnDOMReady函数,进行填写表单的操作。
需要说明的是,本实施例的可交互时机获取组件可以实现为类库,即DLL,供浏览器来加载,由其提供的接口RegistDOMReady为导出函数,其他插件可以调用该导出函数来获知页面可交互时机。本实施例的可交互时机获取组件也可以实现为浏览器模块,供浏览器来加载,由其提供的接口RegistDOMReady为函数,其他插件可以调用该函数来获知页面可交互时机。使用DLL实现时页面交互插件不用修改大量的代码,只需要实现OnDomReady函数即可,使用的时候直接调用DLL即可;而使用可供浏览器加载的浏览器模块实现,则执行效率高。
通过本实施例,实现了获取页面可交互时机的统一接口,其针对不同的浏览器都能兼容,提高了开发人员开发插件的效率,并且速度快,节省***资源,解决了现有技术在获取页面可交互时机时针对不同的浏览器不能兼容、效率低下、浪费***资源等问题。并且,无须采取轮询机制,只需调用浏览器内核中的相应的接口即可,节省了资源。
实施例四
参照图4,示出了根据本发明实施例四的一种用于页面交互的装置的结构框图。
本实施例的用于页面交互的装置包括:第一调用模块402,用于接受页面交互插件的调用指令;判断页面交互插件所在的浏览器使用的浏览器内核的类型;第二调用模块404,用于根据浏览器内核的类型,调用相应的交互时机获取接口获取页面交互插件与浏览器的页面进行交互的时机;交互模块406,用于向页面交互插件通知交互时机获取接口返回的交互时机,以使页面交互插件与浏览器的页面之间进行交互。
优选地,页面交互插件的调用指令中包括:页面元素参数和回调函数参数,其中,页面元素参数用于指示页面交互插件进行页面交互所需的页面元素,回调函数参数用于指示执行页面交互插件与浏览器的页面之间的交互操作的回调函数。
优选地,第二调用模块404,用于若浏览器内核的类型为trident内核,则调用使用trident内核的浏览器的Behavior接口,并将页面元素参数通知给Behavior接口;接收Behavior接口在确定页面元素参数指示的页面元素加载完成后返回的交互时机;若浏览器内核的类型为webkit内核或者Gecko内核,则调用使用webkit内核或者Gecko内核的浏览器中相应的交互时机获取接口,接收相应的交互时机获取接口返回的DOMContentLoaded事件的触发时机作为页面交互插件与浏览器的页面进行交互的时机。
优选地,交互模块406,用于在接收到交互时机获取接口返回的交互时机时,调用回调函数参数指示的回调函数,通过回调函数使页面交互插件与浏览器的页面之间进行交互。
优选地,本实施例的用于页面交互的装置由动态链接库对应的装置或者浏览器组件对应的装置实现。
优选地,Behavior接口包括IElementBehavior接口、IElementBehaviorFactory接口和IElementBehaviorSite接口;其中,IElementBehaviorFactory接口用于定位并调用动态链接库或浏览器组件;IElementBehavior接口用于在确定页面元素加载完成后返回交互时机;IElementBehaviorSite接口用于浏览器与动态链接库或浏览器组件之间的通信。
本实施例的用于页面交互的装置用于实现前述多个方法实施例中相应的用于页面交互的方法,并具有相应的方法实施例的有益效果,在此不再赘述。
在此提供的用于页面交互的方案不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造具有本发明方案的***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的用于页面交互的方案中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。