CN103019734A - 一种活动对象执行方法、系统及浏览器 - Google Patents
一种活动对象执行方法、系统及浏览器 Download PDFInfo
- Publication number
- CN103019734A CN103019734A CN2012105725978A CN201210572597A CN103019734A CN 103019734 A CN103019734 A CN 103019734A CN 2012105725978 A CN2012105725978 A CN 2012105725978A CN 201210572597 A CN201210572597 A CN 201210572597A CN 103019734 A CN103019734 A CN 103019734A
- Authority
- CN
- China
- Prior art keywords
- moving object
- agent
- script
- agent object
- module
- 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.)
- Granted
Links
Images
Landscapes
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种活动对象执行方法、系统及浏览器。其中系统包括页面进程模块,适于在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口;以及拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象;独立进程模块,适于在页面进程激活代理对象时,创建实际要创建的活动对象;位于页面进程模块中的代理对象、位于独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口;其中,独立进程模块进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口。本发明通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的插件与页面进程分离。
Description
技术领域
本发明涉及计算机网络技术领域,具体涉及一种活动对象执行方法、系统及浏览器。
背景技术
在打开浏览器时浏览器的页面进程会创建活动对象,而后进行页面的各项操作,所述活动对象通常指浏览器的插件,例如ActiveX插件。
ActiveX插件是微软公司的IE内核浏览器支持的一种增强浏览体验的扩展接口方式,代表性的插件有Flash、百度影音、QVOD等。ActiveX插件是一种可重用的软件组件,通过使用ActiveX插件,可以很快地在网址、台式应用程序、以及开发工具中加入特殊的功能。如StockTicker插件可以用来在网页上即时地加入活动信息,动画插件可用来向网页中加入动画特性。
ActiveX插件在IE浏览器的页面进程中运行时,由于ActiveX插件数量繁多,运行环境复杂,以及ActiveX插件的开放性,导致了ActiveX插件平均质量较差,一旦ActiveX插件出现卡死或崩溃等问题,会导致整个页面退出,影响了页面操作的稳定性。反之,如果页面进程由于某种原因出现卡死或崩溃等问题,会导致页面中的ActiveX插件退出,影响了ActiveX插件的稳定性。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的活动对象执行系统、浏览器和相应的活动对象执行方法。
根据本发明的一个方面,提供了一种活动对象执行方法,所述活动对象为ActiveX插件对应的对象,所述方法包括:在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口,返回表示所述ActiveX插件为安全插件的信息;拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;在页面进程激活所述代理对象时,在独立于页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;在活动对象和代理对象中分别创建通信窗口;所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,所述在独立于页面进程的独立进程中创建所述实际要创建的活动对象包括:拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。
根据本发明的另一方面,提供了一种活动对象执行系统,包括:页面进程模块,适于在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口,返回表示所述活动对象为安全插件的信息;以及,拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;独立进程模块,适于在页面进程激活所述代理对象时,在独立于页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;位于所述页面进程模块中的代理对象、位于所述独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口,所述活动对象为ActiveX插件对应的活动对象,所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,所述独立进程模块进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。
根据本发明的又一方面,提供了一种浏览器,包括上述活动对象执行系统。
在本发明中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了ActiveX插件的稳定性。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的活动对象执行方法的流程图;
图2示出了本发明中代理对象和活动对象的创建过程的示意图;
图3示出了本发明中由代理对象执行活动对象的脚本的方法的流程图;
图4示出了本发明中由活动对象执行代理对象的脚本的方法的流程图;
图5示出了根据本发明一个实施例的活动对象执行系统的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的活动对象执行方法100的流程图。本方法中,活动对象为ActiveX插件对应的对象,该ActiveX插件可以为百度影音或QVOD(快播)等视频播放插件,但本发明不仅限于此。如图1所示,方法100始于步骤S101,其中在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口,返回表示ActiveX插件为安全插件的信息。具体来说,在页面中有ActiveX插件的情况下,在浏览器的页面进程创建ActiveX插件之前,首先查询注册表,查看与该插件相关的注册表中有没有声明该插件的脚本的安全性。通常来说,对于百度影音或QVOD这类插件,在注册表中一般不会声明其脚本的安全性,所以在查询注册表之后,会创建预创建活动对象,通过查询该预创建活动对象的安全性接口(IObjectSafety)来确定该插件的安全性,只有在确认插件安全的情况下才会真正的创建插件的活动对象。针对百度影音或QVOD这类插件,如果此处不进行特殊处理的话,将会显示警告或不创建对象的信息,使得这类插件无法正常运行。因此,本方法拦截页面进程查询预创建活动对象的IObjectSafety接口,直接返回表示插件为安全插件的信息。例如,在页面进程查询预创建活动对象的IObjectSafety接口时,对于该接口进行拦截,向其返回指示了插件安全性的IObjectSatety接口,通过GetInterfaceSafetyOptions返回INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA,表示该插件是脚本安全的而且初始化安全的,由此可以顺利的通过安全性的检验。
图2示出了本发明中代理对象和活动对象的创建过程的示意图。如图2所示,页面进程中运行有Web页面和代理对象,独立进程中运行有空页面和活动对象。下面参考图2对后续步骤做进一步介绍。
在步骤S101之后,方法100进入步骤S102,其中拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,该代理对象在页面进程中运行。具体来说,当浏览器的页面进程创建活动对象时,拦截CoGetClassObject,创建代理对象替换实际要创建的活动对象,该代理对象包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的代理对象返回给页面进程的IUnknown指针。由此代理对象创建完成。
随后,方法100进入步骤S103,其中在页面进程激活代理对象时,在独立于页面进程的独立进程中,创建实际要创建的活动对象,该活动对象在独立进程中运行。具体来说,在页面进程激活代理对象时,提取出该插件的属性、URL、大小等相关信息,然后创建一个独立进程。首先,创建一个文件(document),即空页面,在其中插入一个对象(object),该独立进程调用CoGetClassObject,拦截该CoGetClassObject,创建一个活动对象。该活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的活动对象返回给独立进程的IUnknown指针。由此活动对象创建完成,该活动对象是真正实现插件功能的对象。
在活动对象的创建过程中,对于某些插件(如Flash插件)可以不实现IWebBrowser2接口,活动对象仍然能正常创建。但对于百度影音或QVOD这类插件,如果不实现IWebBrowser2接口,活动对象创建将会失败。实现IWebBrowser2接口的目的主要是实现跳转(Navigate方法)、获得URL(get_LocationURL方法)、获得页面(get_document方法下的IHtmlDocument接口)等功能。为了实现这些功能,在独立进程查询IWebBrowser2接口时,对其进行拦截,返回自创建的IWebBrowser2接口,从而创建上述插件的活动对象。
随后,方法100进入步骤S104,其中在代理对象和活动对象中分别创建与插件对象关联的通信窗口,用于使代理对象和活动对象进行通信。通过这两个通信窗口,两个对象可以针对插件的大小、焦点、刷新、脚本以及其它信息进行交互。
随后,方法100进入步骤S105,其中活动对象和代理对象通过通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象,从而实现插件所要实现的功能。
进一步的,如果Web页面中有嵌套结构,即页面进程运行有多个父页面和多个子页面。每当页面进程创建一个子页面及其代理对象时,将子页面的代理对象ID(也可包括其URL)和该子页面的父页面的代理对象ID(也可包括其URL)发送给独立进程,在独立进程中按照对应的层次结构创建活动对象。在这种情况下,运行于页面进程中的代理对象为多个,运行于独立进程中的活动对象为多个,代理对象和活动对象一一对应,每个代理对象的通信窗口和与该代理对象对应的活动对象的通信窗口具有对应的属性,通过这两个通信窗口实现活动对象和与其对应的代理对象的通信。
在本方法中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了ActiveX插件的稳定性。
在上述方法中,由于真正的ActiveX插件与页面进程分离,当希望插件视窗在原Web页面中进行显示时,可以将活动对象对应的插件视窗设置在原Web页面的插件视窗位置处,该活动对象对应的插件视窗可以移动、缩放,而Web页面不受影响。
根据上述实施例提供的方法,在Web页面滚动时可使插件视窗不随之滚动。具体来说,按照现有的操作,当Web页面滚动时,会调用活动对象的IOleWindow接口的GetWindow方法判断活动对象是否具有对应的视窗,如果有视窗则通过发送WM_MOVE消息移动视窗。但本方法可以在调用活动对象的IOleWindow接口的GetWindow方法时返回空值,这样视窗就不会随之滚动。
进一步的,在上述创建了代理对象和活动对象的基础上,活动对象和代理对象之间的通信包括进程间的脚本执行过程。该脚本执行过程包括由代理对象执行活动对象的脚本的过程,以及由活动对象执行代理对象的脚本的过程,下面分别进行介绍。
图3示出了本发明中由代理对象执行活动对象的脚本的方法300的流程图。该方法适用于由运行于页面进程中的代理对象执行运行于独立进程中的活动对象的脚本,即该方法是运行于独立进程中的活动对象控制页面进程中页面的方法。如图3所示,方法300始于步骤S301,其中活动对象通过通信窗口将脚本发送给代理对象。以用户点击插件视窗上创建的按钮,触发页面变黑为例,当用户点击插件视窗上的按钮时,插件的活动对象获取按钮点击操作对应的脚本,将该脚本通过通信窗口发送给代理对象。
随后,方法300进入步骤S302,其中活动对象通过调用代理对象的调度接口,让代理对象执行获取脚本中待执行方法的调度标识的方法,在代理对象获取该调度标识后通过通信窗口将调度标识返回给活动对象。具体来说,首先独立进程解析按钮点击操作对应的脚本,获取该脚本中待执行的方法为使页面变黑,然后将脚本中待执行的方法的名称调到活动对象的IDispatch接口中,IDispatch接口为调度接口,用于调用不支持虚函数表的语言程序中的函数,IDispatch接口具有GetIDsOfNames函数和Invoke函数,其中GetIDsOfNames函数提供的是利用方法的名称返回其调度ID的方法,Invoke函数提供的是利用方法的调度ID执行方法的指令。由于活动对象对应的页面是空页面,它不具备使页面变黑的方法,所以活动对象无法获知脚本中该方法的调度标识(ID),那么活动对象通过通信窗口调用代理对象的IDispatch接口。由于代理对象对应的Web页面是完整的页面,通过调用代理对象的GetIDsOfNames函数提供的方法,可以让代理对象获取脚本中待执行方法的调度ID,然后代理对象通过通信窗口将该调度ID返回给活动对象。
随后,方法300进入步骤S303,其中活动对象拦截独立进程中执行脚本中待执行方法的指令,将该指令发送给代理对象。具体来说,在活动对象获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程独立进程下一步就将执行Invoke(ID)的指令,但本方法在这里拦截独立进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给代理对象。
随后,方法300进入步骤S304,其中代理对象通过执行指令,执行脚本中待执行方法,而后将执行结果返回给活动对象。具体来说,代理对象执行Invoke(ID)的指令,从而执行脚本中待执行的方法,使页面变黑,并将页面变黑的通知消息返回给活动对象。
图4示出了本发明中由活动对象执行代理对象的脚本的方法400的流程图。该方法适用于由运行于独立进程中的活动对象执行运行于页面进程中的代理对象的脚本,即该方法是运行于页面进程中的页面控制独立进程中活动对象的方法。如果页面想要获取插件的信息(如版本号、路径、URL等属性)或者页面想要操作插件(如页面想要改变插件视窗的大小),都可以通过该方法来实现。如图4所示,方法400始于步骤S401,其中代理对象通过通信窗口将脚本发送给活动对象。以获取插件版本号为例,由于页面进程中的代理对象并不是真正的插件对象,它并不知道插件的版本号,因而代理对象不能直接向页面反馈插件的版本号。在独立进程创建完成活动对象之后,会向页面通知活动对象的变量,页面开发者根据该变量在页面中写入获取插件的版本号的脚本,该脚本中待执行的方法就是获取插件的版本号。代理对象通过通信窗口将获取插件的版本号的脚本发送给活动对象。
随后,方法400进入步骤S402,其中代理对象通过调用活动对象的调度接口,让活动对象执行获取脚本中待执行方法的调度标识的方法,在活动对象获取该调度标识后通过通信窗口将调度标识返回给代理对象。具体来说,首先页面解析脚本,将该脚本中待执行的方法的名称调到代理对象的IDispatch接口中,IDispatch接口为调度接口,用于调用不支持虚函数表的语言程序中的函数,IDispatch接口具有GetIDsOfNames函数和Invoke函数,其中GetIDsOfNames函数提供的是利用方法的名称返回其调度ID的方法,Invoke函数提供的是利用方法的调度ID执行方法的指令。由于代理对象无法获知脚本中待执行方法的调度标识(ID),所以代理对象通过通信窗口调用活动对象的IDispatch接口。而活动对象是真正的插件的对象,所以通过调用活动对象的GetIDsOfNames函数提供的方法,可以让活动对象获取待执行的方法的调度ID,然后活动对象通过通信窗口将该调度ID返回给代理对象。
随后,方法400进入步骤S403,其中代理对象拦截页面进程中执行脚本中待执行方法的指令,将该指令发送给活动对象。具体来说,在代理对象获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程下一步就会执行Invoke(ID)的指令,本方法在这里拦截页面进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给活动对象。
随后,方法400进入步骤S404,其中活动对象通过执行指令,执行脚本中待执行方法,而后将执行结果返回给代理对象。具体来说,活动对象执行Invoke(ID)的指令,从而执行脚本中待执行的方法,获取插件的版本号,并将插件的版本号返回给代理对象,然后代理对象会将插件的版本号反馈给页面。
根据上述进程间的脚本执行方法,使得代理对象可以执行活动对象的脚本,活动对象可以执行代理对象的脚本,从而实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制,以及运行于页面进程中的页面对运行于独立进程中的活动对象的控制。
图5示出了根据本发明一个实施例的活动对象执行系统的结构框图。如图5所示,该系统包括页面进程模块510和独立进程模块520、位于页面进程模块510中的代理对象511和位于独立进程模块520中的活动对象521、以及在活动对象511和代理对象521中分别创建的通信窗口530。本系统中的活动对象为ActiveX插件对应的活动对象,该ActiveX插件可以为百度影音或QVOD(快播)等视频播放插件,但本发明不仅限于此。
页面进程模块510适于在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口,返回表示活动对象为安全插件的信息;以及,拦截页面进程创建活动对象的过程,创建代理对象511替换实际要创建的活动对象,代理对象511在页面进程中运行。在页面中有ActiveX插件的情况下,页面进程模块510在创建ActiveX插件之前,首先查询注册表,查看与该插件相关的注册表中有没有声明该插件的脚本的安全性。通常来说,对于百度影音或QVOD这类插件,在注册表中一般不会声明其脚本的安全性,所以在查询注册表之后,页面进程模块510会创建预创建活动对象,通过查询该预创建活动对象的安全性接口(IObjectSafety)来确定该插件的安全性,只有在确认插件安全的情况下才会真正的创建插件的活动对象。针对百度影音或QVOD这类插件,如果此处不进行特殊处理的话,将会显示警告或不创建对象的信息,使得这类插件无法正常运行。因此,页面进程模块510拦截页面进程查询预创建活动对象的IObjectSafety接口,直接返回表示插件为安全插件的信息。例如,在页面进程查询预创建活动对象的IObjectSafety接口时,页面进程模块510对该接口进行拦截,向其返回指示了插件安全性的IObjectSatety接口,通过GetInterfaceSafetyOptions返回INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA,表示该插件是脚本安全的而且初始化安全的,由此可以顺利的通过安全性的检验。当浏览器的页面进程创建活动对象时,页面进程模块510拦截CoGetClassObject,创建代理对象511替换实际要创建的活动对象,该代理对象511包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的代理对象511返回给页面进程的IUnknown指针。由此代理对象511创建完成。
独立进程模块520适于在页面进程激活代理对象511时,在独立于页面进程的独立进程中,创建实际要创建的活动对象521,活动对象521在独立进程中运行。在页面进程激活代理对象511时,提取出该插件的属性、URL、大小等相关信息,然后创建一个独立进程。首先,创建一个文件(document),即空页面,在其中插入一个对象(object),该独立进程调用CoGetClassObject,独立进程模块520拦截该CoGetClassObject,创建一个活动对象521。该活动对象521包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的活动对象521返回给独立进程的IUnknown指针。由此活动对象521创建完成,该活动对象521是真正实现插件功能的对象。
独立进程模块520进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建实际要创建的活动对象521。
活动对象521和代理对象511通过通信窗口530进行通信,实现代理对象511调用活动对象521和/或活动对象521调用代理对象511。通过这两个通信窗口,两个对象可以针对插件的大小、焦点、刷新、脚本以及其它信息进行交互。
进一步的,当Web页面中有嵌套结构时,页面进程模块510包括多个代理对象,独立进程模块520包括多个活动对象,代理对象和活动对象一一对应,代理对象的通信窗口和与代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
在本系统中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了ActiveX插件的稳定性。
进一步的,在图5所示的系统中,代理对象511和活动对象521之间可以交互脚本,即代理对象511可以执行活动对象521的脚本,活动对象521也可以执行代理对象511的脚本。
活动对象521包括第一发送模块522、第一调度标识获取模块523、第一拦截模块524,其中第一调度标识获取模块523进一步包括第一调用模块525和第一调度标识接收模块526。代理对象511包括第一接收模块512和第一执行模块513。
第一发送模块522适于通过通信窗口530将脚本发送给代理对象511。以用户点击插件视窗上创建的按钮,触发页面变黑为例,当用户点击插件视窗上的按钮时,插件的活动对象521获取按钮点击操作对应的脚本,第一发送模块522将该脚本通过通信窗口530发送给代理对象511。
第一调度标识获取模块523适于通过调用代理对象511的调度接口,获取脚本中待执行方法的调度标识。其中,第一调用模块525适于调用代理对象511的调度接口,让代理对象511执行获取脚本中待执行方法的调度标识的方法获取调度标识;第一调度标识接收模块526适于接收代理对象511通过通信窗口530返回的调度标识。具体来说,首先独立进程模块520解析按钮点击操作对应的脚本,获取该脚本中待执行的方法为使页面变黑,然后将脚本中待执行的方法的名称调到活动对象521的IDispatch接口中。由于活动对象521对应的页面是空页面,它不具备使页面变黑的方法,所以活动对象521无法获知脚本中该方法的调度标识(ID),那么活动对象521的第一调用模块525通过通信窗口530调用代理对象511的IDispatch接口。由于代理对象511对应的Web页面是完整的页面,通过调用代理对象511的GetIDsOfNames函数提供的方法,可以让代理对象511获取脚本中待执行方法的调度ID,然后代理对象511通过通信窗口530将该调度ID返回给活动对象521的第一调度标识接收模块526。
第一拦截模块524适于拦截独立进程中执行脚本中待执行方法的指令,将指令发送给代理对象511。在活动对象521获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程独立进程下一步就将执行Invoke(ID)的指令,但在这里第一拦截模块524拦截独立进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给代理对象511。
第一接收模块512适于接收活动对象521的第一发送模块522发送的脚本和第一拦截模块524发送的指令;第一执行模块513适于通过执行指令,执行脚本中待执行的方法,而后将执行结果返回给活动对象521。第一执行模块513执行Invoke(ID)的指令,从而执行脚本中待执行的方法,使页面变黑,并将页面变黑的通知消息返回给活动对象521。
代理对象511还包括第二发送模块514、第二调度标识获取模块515、第二拦截模块516,其中第二调度标识获取模块515进一步包括第二调用模块517和第二调度标识接收模块518。活动对象521还包括第二接收模块527和第二执行模块528。
第二发送模块514适于通过通信窗口530将脚本发送给活动对象521。以获取插件版本号为例,由于页面进程中的代理对象511并不是真正的插件对象,它并不知道插件的版本号,因而代理对象511不能直接向页面反馈插件的版本号。在独立进程创建完成活动对象521之后,会向页面通知活动对象521的变量,页面开发者根据该变量在页面中写入获取插件的版本号的脚本,该脚本中待执行的方法就是获取插件的版本号。代理对象511第二发送模块514通过通信窗口530将获取插件的版本号的脚本发送给活动对象521。
第二调度标识获取模块515适于通过调用活动对象521的调度接口,获取脚本中待执行方法的调度标识。其中,第二调用模块517适于通过调用活动对象521的调度接口,让活动对象521执行获取脚本中待执行方法的调度标识的方法获取调度标识;第二调度标识接收模块518适于接收活动对象521通过通信窗口530返回的调度标识。首先页面进程模块510解析脚本,将该脚本中待执行的方法的名称调到代理对象511的IDispatch接口中。由于代理对象511无法获知脚本中待执行方法的调度标识(ID),所以代理对象511的第二调用模块517通过通信窗口530调用活动对象521的IDispatch接口。而活动对象521是真正的插件的对象,所以通过调用活动对象521的GetIDsOfNames函数提供的方法,可以让活动对象521获取待执行的方法的调度ID,然后活动对象521通过通信窗口530将该调度ID返回给代理对象511的第二调度标识接收模块518。
第二拦截模块516适于拦截页面进程中执行脚本中待执行方法的指令,将指令发送给活动对象521。在代理对象511获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程下一步就会执行Invoke(ID)的指令,但在这里第二拦截模块516拦截页面进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给活动对象521。
第二接收模块527适于接收代理对象511中的第二发送模块514发送的脚本以及第二拦截模块516发送的指令;第二执行模块528适于通过执行指令,执行脚本中待执行方法,而后将执行结果返回给代理对象511。
根据上述功能模块实现的功能,使得代理对象可以执行活动对象的脚本,活动对象可以执行代理对象的脚本,从而实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制,以及运行于页面进程中的页面对运行于独立进程中的活动对象的控制。
本发明还提供了一种浏览器,该浏览器包括上述实施例所述的活动对象执行系统。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的活动对象执行系统及浏览器中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (16)
1.一种活动对象执行方法,所述活动对象为ActiveX插件对应的对象,所述方法包括:
在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口,返回表示所述ActiveX插件为安全插件的信息;
拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
在页面进程激活所述代理对象时,在独立于页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
在活动对象和代理对象中分别创建通信窗口;
所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;
其中,所述在独立于页面进程的独立进程中创建所述实际要创建的活动对象包括:拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。
2.根据权利要求1所述的方法,所述活动对象和代理对象通过所述通信窗口进行通信包括活动对象和代理对象之间的脚本执行过程。
3.根据权利要求2所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由代理对象执行活动对象的脚本,所述由代理对象执行活动对象的脚本的过程包括:
所述活动对象通过通信窗口将脚本发送给所述代理对象;
所述活动对象通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识;
所述活动对象拦截独立进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述代理对象;
所述代理对象通过执行所述指令,执行所述脚本中待执行的方法,而后将执行结果返回给所述活动对象。
4.根据权利要求3所述的方法,所述活动对象通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括:
所述活动对象通过调用所述代理对象的调度接口,让所述代理对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述代理对象通过通信窗口将所述调度标识返回给所述活动对象。
5.根据权利要求2所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由活动对象执行代理对象的脚本,所述由活动对象执行代理对象的脚本的过程包括:
所述代理对象通过通信窗口将脚本发送给所述活动对象;
所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识;
所述代理对象拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象;
所述活动对象通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
6.根据权利要求5所述的方法,所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括:
所述代理对象通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述活动对象通过通信窗口将所述调度标识返回给所述代理对象。
7.根据权利要求1至6任一项所述的方法,运行于所述页面进程中的代理对象为多个,运行于所述独立进程中的活动对象为多个,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
8.根据权利要求1至7任一项所述的方法,所述ActiveX插件为百度影音或QVOD。
9.一种活动对象执行系统,包括:
页面进程模块,适于在活动对象创建之前,拦截页面进程查询预创建活动对象的安全性接口,返回表示所述活动对象为安全插件的信息;以及,拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
独立进程模块,适于在页面进程激活所述代理对象时,在独立于页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
位于所述页面进程模块中的代理对象、位于所述独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口,所述活动对象为ActiveX插件对应的活动对象,所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;
其中,所述独立进程模块进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。
10.根据权利要求9所述的系统,
所述活动对象包括:
第一发送模块,适于通过通信窗口将脚本发送给代理对象;
第一调度标识获取模块,适于通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识;
第一拦截模块,适于拦截独立进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述代理对象;
所述代理对象包括:
第一接收模块,适于接收所述活动对象的第一发送模块发送的脚本和第一拦截模块发送的指令;
第一执行模块,适于通过执行所述指令,执行所述脚本中待执行的方法,而后将执行结果返回给所述活动对象。
11.根据权利要求10所述的系统,所述第一调度标识获取模块包括:
第一调用模块,适于调用所述代理对象的调度接口,让所述代理对象执行获取所述脚本中待执行方法的调度标识的方法获取所述调度标识;
第一调度标识接收模块,适于接收所述代理对象通过通信窗口返回的调度标识。
12.根据权利要求9所述的系统,
所述代理对象包括:
第二发送模块,适于通过通信窗口将脚本发送给所述活动对象;
第二调度标识获取模块,适于通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识;
第二拦截模块,适于拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象;
所述活动对象包括:
第二接收模块,适于接收所述代理对象中的第二发送模块发送的脚本以及第二拦截模块发送的指令;
第二执行模块,适于通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
13.根据权利要求12所述的系统,所述第二调度标识获取模块包括:
第二调用模块,适于通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法获取调度标识;
第二调度标识接收模块,适于接收所述活动对象通过通信窗口返回的所述调度标识。
14.根据权利要求9至13任一项所述的系统,所述页面进程模块包括多个代理对象,所述独立进程模块包括多个活动对象,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
15.根据权利要求9至14任一项所述的系统,所述ActiveX插件为百度影音或QVOD。
16.一种包括权利要求9至15任一项所述的活动对象执行系统的浏览器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210572597.8A CN103019734B (zh) | 2012-12-25 | 2012-12-25 | 一种活动对象执行方法、系统及浏览器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210572597.8A CN103019734B (zh) | 2012-12-25 | 2012-12-25 | 一种活动对象执行方法、系统及浏览器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103019734A true CN103019734A (zh) | 2013-04-03 |
CN103019734B CN103019734B (zh) | 2016-08-03 |
Family
ID=47968372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210572597.8A Expired - Fee Related CN103019734B (zh) | 2012-12-25 | 2012-12-25 | 一种活动对象执行方法、系统及浏览器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019734B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617092A (zh) * | 2013-11-21 | 2014-03-05 | 北京奇虎科技有限公司 | 一种基于浏览器的插件运行方法和装置 |
WO2014101455A1 (zh) * | 2012-12-25 | 2014-07-03 | 北京奇虎科技有限公司 | 浏览器活动对象的执行方法、系统及浏览器 |
CN109302493A (zh) * | 2018-11-15 | 2019-02-01 | 北京金山云网络技术有限公司 | 一种用户信息共享方法、装置、电子设备及存储介质 |
CN109582317A (zh) * | 2018-11-30 | 2019-04-05 | 百度在线网络技术(北京)有限公司 | 用于调试寄宿应用的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070199073A1 (en) * | 2005-10-14 | 2007-08-23 | Softwareonline, Llc | Enhanced browser security |
CN102156663A (zh) * | 2011-03-22 | 2011-08-17 | 北京书生国际信息技术有限公司 | 一种实现插件的方法和装置 |
CN102314510A (zh) * | 2011-09-15 | 2012-01-11 | 奇智软件(北京)有限公司 | 一种浏览器控件执行方法及系统 |
CN102436507A (zh) * | 2011-12-28 | 2012-05-02 | 奇智软件(北京)有限公司 | 一种浏览网页的方法及装置 |
-
2012
- 2012-12-25 CN CN201210572597.8A patent/CN103019734B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070199073A1 (en) * | 2005-10-14 | 2007-08-23 | Softwareonline, Llc | Enhanced browser security |
CN102156663A (zh) * | 2011-03-22 | 2011-08-17 | 北京书生国际信息技术有限公司 | 一种实现插件的方法和装置 |
CN102314510A (zh) * | 2011-09-15 | 2012-01-11 | 奇智软件(北京)有限公司 | 一种浏览器控件执行方法及系统 |
CN102436507A (zh) * | 2011-12-28 | 2012-05-02 | 奇智软件(北京)有限公司 | 一种浏览网页的方法及装置 |
Non-Patent Citations (1)
Title |
---|
杨莉萍: "VB的多接口技术及安全性控件的制作", 《计算机系统应用》, 30 April 2001 (2001-04-30), pages 55 - 58 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014101455A1 (zh) * | 2012-12-25 | 2014-07-03 | 北京奇虎科技有限公司 | 浏览器活动对象的执行方法、系统及浏览器 |
CN103617092A (zh) * | 2013-11-21 | 2014-03-05 | 北京奇虎科技有限公司 | 一种基于浏览器的插件运行方法和装置 |
CN109302493A (zh) * | 2018-11-15 | 2019-02-01 | 北京金山云网络技术有限公司 | 一种用户信息共享方法、装置、电子设备及存储介质 |
CN109582317A (zh) * | 2018-11-30 | 2019-04-05 | 百度在线网络技术(北京)有限公司 | 用于调试寄宿应用的方法和装置 |
CN109582317B (zh) * | 2018-11-30 | 2022-02-08 | 百度在线网络技术(北京)有限公司 | 用于调试寄宿应用的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103019734B (zh) | 2016-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019733A (zh) | 一种用于浏览器的活动对象执行方法、系统及浏览器 | |
US8166396B2 (en) | User interface rendering | |
US10534512B2 (en) | System and method for identifying web elements present on a web-page | |
EP2339465B1 (en) | Location independent execution of user interface operations | |
CN103064709A (zh) | 浏览器活动对象的执行方法、系统及浏览器 | |
CN103034517A (zh) | 浏览器控制工具加载方法和装置 | |
CN103500210A (zh) | 一种进行网页加载的方法、装置和浏览器 | |
EP3822828A2 (en) | Method, apparatus, device and storage medium for determining page theme and computer program product | |
US20150234798A1 (en) | System and method for changing a web ui application appearance based on state through css selector cascading | |
CN102890724A (zh) | 网页加载方法和装置 | |
CN103064680B (zh) | 浏览器中插件的播放方法及装置 | |
CN102982169A (zh) | 用于隔离网页插件的浏览器和方法 | |
CN103034518A (zh) | 加载浏览器控制工具的方法及浏览器 | |
CN103226474A (zh) | 网页脚本与浏览器程序之间的交互方法、装置及系统 | |
CN103019734A (zh) | 一种活动对象执行方法、系统及浏览器 | |
CN103034503B (zh) | 一种脚本执行方法、系统及浏览器 | |
CN104598322A (zh) | 多窗口组件间通信的方法及装置 | |
CN103034495A (zh) | 对网页中插件进行隔离的浏览器及网页插件的隔离方法 | |
CN103530329A (zh) | 一种进行网页加载的方法、装置和浏览器 | |
WO2015080903A1 (en) | Systems and methods for executing aspects of a document | |
US9648078B2 (en) | Identifying a browser for rendering an electronic document | |
CN103309752A (zh) | 组件间通信的方法及系统和通信处理器 | |
CN103019735A (zh) | 浏览器活动对象的执行方法、系统及浏览器 | |
CN114816401A (zh) | 界面元素的定位方法、电子设备及存储介质 | |
CN103559097A (zh) | 一种浏览器中进程间通信的方法、装置和浏览器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160803 Termination date: 20211225 |
|
CF01 | Termination of patent right due to non-payment of annual fee |