CN103019733B - 一种用于浏览器的活动对象执行方法、系统及浏览器 - Google Patents
一种用于浏览器的活动对象执行方法、系统及浏览器 Download PDFInfo
- Publication number
- CN103019733B CN103019733B CN201210572586.XA CN201210572586A CN103019733B CN 103019733 B CN103019733 B CN 103019733B CN 201210572586 A CN201210572586 A CN 201210572586A CN 103019733 B CN103019733 B CN 103019733B
- Authority
- CN
- China
- Prior art keywords
- moving object
- plug
- script
- unit
- agent
- 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.)
- Active
Links
- 230000000694 effects Effects 0.000 title claims abstract description 9
- 238000000034 method Methods 0.000 claims abstract description 417
- 230000008569 process Effects 0.000 claims abstract description 229
- 238000004891 communication Methods 0.000 claims abstract description 90
- 238000013515 script Methods 0.000 claims description 223
- 230000000903 blocking effect Effects 0.000 claims description 20
- 230000005540 biological transmission Effects 0.000 claims description 14
- 230000004913 activation Effects 0.000 claims description 10
- 230000000875 corresponding effect Effects 0.000 description 35
- 230000006870 function Effects 0.000 description 32
- 241000700605 Viruses Species 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000004886 process control Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种用于浏览器的活动对象执行方法、系统及浏览器。其中系统包括页面进程模块,适于在活动对象创建之前获知插件的类型;以及拦截页面进程创建活动对象的过程创建代理对象替换实际要创建的活动对象;独立进程模块,适于在独立进程中创建实际要创建的活动对象;位于页面进程模块中的代理对象、位于独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口;如果根据插件的类型获知插件为第二类插件,页面进程模块还适于拦截页面进程查询预创建活动对象的安全性接口,返回表示第二类插件为安全插件的信息。本发明通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离。
Description
技术领域
本发明涉及计算机网络技术领域,具体涉及一种用于浏览器的活动对象执行方法、系统及浏览器。
背景技术
在打开浏览器时浏览器的页面进程会创建活动对象,而后进行页面的各项操作,所述活动对象通常指浏览器的插件,例如ActiveX插件。
ActiveX插件是微软公司的IE内核浏览器支持的一种增强浏览体验的扩展接口方式,代表性的插件有Flash、百度影音、快播(QVOD)等。ActiveX插件是一种可重用的软件组件,通过使用ActiveX插件,可以很快地在网址、台式应用程序、以及开发工具中加入特殊的功能。如StockTicker插件可以用来在网页上即时地加入活动信息,动画插件可用来向网页中加入动画特性。
ActiveX插件在IE浏览器的页面进程中运行时,由于ActiveX插件数量繁多,运行环境复杂,以及ActiveX插件的开放性,导致了ActiveX插件平均质量较差,一旦ActiveX插件出现卡死或崩溃等问题,会导致整个页面退出,影响了页面操作的稳定性。反之,如果页面进程由于某种原因出现卡死或崩溃等问题,会导致页面中的ActiveX插件退出,影响了ActiveX插件的稳定性。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的用于浏览器的活动对象执行系统、浏览器和相应的用于浏览器的活动对象执行方法。
根据本发明的一个方面,提供了一种用于浏览器的活动对象执行方法,所述活动对象为插件对应的对象,所述方法包括:在活动对象创建之前,获知插件的类型;拦截页面进程创建活动对象的过程,根据所述插件的类型,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;在页面进程激活所述代理对象时,根据所述插件的类型,在独立于页面进程的独立进程中创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;在活动对象和代理对象中分别创建通信窗口;所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,如果根据所述插件的类型获知所述插件为第二类插件,在所述拦截页面进程创建活动对象的过程的步骤之前还包括:拦截页面进程查询预创建活动对象的安全性接口,返回表示所述第二类插件为安全插件的信息。
根据本发明的另一方面,提供了一种用于浏览器的活动对象执行系统,包括:页面进程模块,适于在活动对象创建之前,获知插件的类型;以及,拦截页面进程创建活动对象的过程,根据所述插件的类型,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;独立进程模块,适于在页面进程激活所述代理对象时,根据所述插件的类型,在独立于页面进程的独立进程中创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;位于所述页面进程模块中的代理对象、位于所述独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口,所述活动对象为插件对应的活动对象,所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,如果根据所述插件的类型获知所述插件为第二类插件,所述页面进程模块还适于拦截页面进程查询预创建活动对象的安全性接口,返回表示所述第二类插件为安全插件的信息。
根据本发明的又一方面,提供了一种浏览器,包括上述用于浏览器的活动对象执行系统。
在本发明中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了ActiveX插件的稳定性。而且本发明兼容于所有ActiveX插件,包括在注册表中声明其脚本安全性的插件以及没有声明其脚本安全性的插件。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的用于浏览器的活动对象执行方法的流程图;
图2示出了本发明中代理对象和活动对象的创建过程的示意图;
图3示出了本发明中一种由代理对象执行活动对象的脚本的方法的流程图;
图4示出了本发明中另一种由代理对象执行活动对象的脚本的方法的流程图;
图5示出了本发明中由活动对象执行代理对象的脚本的方法的流程图;
图6示出了根据本发明一个实施例的用于浏览器的活动对象执行系统的结构框图;
图7示出了根据本发明另一个实施例的用于浏览器的活动对象执行系统的结构框图;
图8示出了根据本发明又一个实施例的用于浏览器的活动对象执行系统的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的用于浏览器的活动对象执行方法100的流程图。本方法中,活动对象为ActiveX插件对应的对象。如图1所示,方法100始于步骤S101,其中在活动对象创建之前,获知插件的类型。具体来说,在页面中有ActiveX插件的情况下,在浏览器的页面进程创建ActiveX插件之前,首先查询注册表,查看与该插件相关的注册表中有没有声明该插件的脚本的安全性。本文中将注册表中已声明插件的脚本的安全性的插件称为第一类插件,如Flash插件就属于第一类插件;将注册表中没有声明插件的脚本的安全性的插件称为第二类插件,如百度影音、QVOD等视频播放插件就属于第二类插件。因此,根据注册表中有没有声明该插件的脚本的安全性即可获知当前插件的类型,如果当前插件为第一类插件,则跳转至步骤S104;如果当前插件为第二类插件,则执行步骤S102。
在步骤S102中,对于第二类插件,在查询注册表之后,创建预创建活动对象。
在步骤S102之后,方法100进入步骤S103,其中拦截页面进程查询预创建活动对象的安全性接口(IObjectSafety接口),直接返回表示插件为安全插件的信息。对于在注册表中没有声明其脚本的安全性的插件,可以通过查询该插件的预创建活动对象的IObjectSafety来确定该插件的安全性,只有在确认插件安全的情况下才会真正的创建插件的活动对象。针对第二类插件,如果此处不进行特殊处理的话,将会显示警告或不创建对象的信息,使得这类插件无法正常运行。所以在页面进程查询预创建活动对象的IObjectSafety接口时,对于该接口进行拦截,向其返回指示了插件安全性的IObjectSatety接口,通过GetInterfaceSafetyOptions返回INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA,表示该插件是脚本安全的而且初始化安全的,由此可以顺利的通过安全性的检验。
图2示出了本发明中代理对象和活动对象的创建过程的示意图。如图2所示,页面进程中运行有Web页面和代理对象,独立进程中运行有空页面和活动对象。下面参考图2对后续步骤做进一步介绍。
在步骤S103之后,方法100进入步骤S104,其中拦截页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,该代理对象在页面进程中运行。具体来说,当浏览器的页面进程创建活动对象时,拦截CoGetClassObject,创建代理对象替换实际要创建的活动对象,该代理对象包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的代理对象返回给页面进程的IUnknown指针。由此代理对象创建完成。
随后,方法100进入步骤S105,其中在页面进程激活代理对象时,在独立于页面进程的独立进程中,创建实际要创建的活动对象,该活动对象在独立进程中运行。具体来说,在页面进程激活代理对象时,提取出该插件的属性、URL、大小等相关信息,然后创建一个独立进程。首先,创建一个文件(document),即空页面,在其中插入一个对象(object),该独立进程调用CoGetClassObject,拦截该CoGetClassObject,创建一个活动对象。该活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的活动对象返回给独立进程的IUnknown指针。由此活动对象创建完成,该活动对象是真正实现插件功能的对象。
在活动对象的创建过程中,对于第一类插件可以不实现IWebBrowser2接口,活动对象仍然能正常创建。但对于第二类插件,如果不实现IWebBrowser2接口,活动对象创建将会失败。实现IWebBrowser2接口的目的主要是实现跳转(Navigate方法)、获得URL(get_LocationURL方法)、获得页面(get_document方法下的IHtmlDocument接口)等功能。为了实现这些功能,如果插件为第二类插件,则在独立进程查询IWebBrowser2接口时,对其进行拦截,返回自创建的IWebBrowser2接口,从而创建上述第二类插件的活动对象。
随后,方法100进入步骤S106,其中在代理对象和活动对象中分别创建与插件对象关联的通信窗口,用于使代理对象和活动对象进行通信。通过这两个通信窗口,两个对象可以针对插件的大小、焦点、刷新、脚本以及其它信息进行交互。
随后,方法100进入步骤S107,其中活动对象和代理对象通过通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象,从而实现插件所要实现的功能。
进一步的,如果Web页面中有嵌套结构,即页面进程运行有多个父页面和多个子页面。每当页面进程创建一个子页面及其代理对象时,将子页面的代理对象ID(也可包括其URL)和该子页面的父页面的代理对象ID(也可包括其URL)发送给独立进程,在独立进程中按照对应的层次结构创建活动对象。在这种情况下,运行于页面进程中的代理对象为多个,运行于独立进程中的活动对象为多个,代理对象和活动对象一一对应,每个代理对象的通信窗口和与该代理对象对应的活动对象的通信窗口具有对应的属性,通过这两个通信窗口实现活动对象和与其对应的代理对象的通信。
在本方法中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了ActiveX插件的稳定性。而且本方法兼容于所有ActiveX插件,包括在注册表中声明其脚本安全性的插件以及没有声明其脚本安全性的插件。
在上述方法中,由于真正的ActiveX插件与页面进程分离,当希望插件视窗在原Web页面中进行显示时,可以将活动对象对应的插件视窗设置在原Web页面的插件视窗位置处,该活动对象对应的插件视窗可以移动、缩放,而Web页面不受影响。
根据上述实施例提供的方法,在Web页面滚动时可使插件视窗不随之滚动。具体来说,按照现有的操作,当Web页面滚动时,会调用活动对象的IOleWindow接口的GetWindow方法判断活动对象是否具有对应的视窗,如果有视窗则通过发送WM_MOVE消息移动视窗。但本方法可以在调用活动对象的IOleWindow接口的GetWindow方法时返回空值,这样视窗就不会随之滚动。
进一步的,在上述创建了代理对象和活动对象的基础上,活动对象和代理对象之间的通信包括进程间的脚本执行过程。该脚本执行过程包括由代理对象执行活动对象的脚本的过程,以及由活动对象执行代理对象的脚本的过程,下面分别进行介绍。
图3示出了本发明中一种由代理对象执行活动对象的脚本的方法300的流程图。该方法适用于第一类插件的代理对象执行活动对象的脚本,即该方法是运行于独立进程中的第一类插件的活动对象控制页面进程中页面的方法。如图3所示,方法300始于步骤S301,其中活动对象通过通信窗口将脚本发送给代理对象。以用户点击插件上创建的按钮,触发页面变黑为例,当用户点击插件上的按钮时,活动对象获取按钮点击操作对应的脚本,将该脚本通过通信窗口发送给代理对象。
随后,方法300进入步骤S302,其中代理对象查询页面进程中与脚本执行有关的接口,根据该接口获取脚本执行方法。在代理对象接收到上述按钮点击操作对应的脚本之后,查询和获取页面进程中的IHTMLWindow接口,IHTMLWindow接口为与脚本执行有关的接口,该IHTMLWindow接口中的ExecScript为用于执行脚本的函数,即ExecScript函数提供脚本执行方法。
随后,方法300进入步骤S303,其中代理对象根据脚本执行方法执行该脚本。代理对象根据ExecScript函数提供脚本执行方法执行上述按钮点击操作对应的脚本,使页面变黑。
图4示出了本发明中另一种由代理对象执行活动对象的脚本的方法400的流程图。该方法适用于第二类插件的代理对象执行活动对象的脚本,即该方法是运行于独立进程中的第二类插件的活动对象控制页面进程中页面的方法。如图4所示,方法400始于步骤S401,其中活动对象通过通信窗口将脚本发送给代理对象。以用户点击插件视窗上创建的按钮,触发页面变黑为例,当用户点击插件视窗上的按钮时,插件的活动对象获取按钮点击操作对应的脚本,将该脚本通过通信窗口发送给代理对象。
随后,方法400进入步骤S402,其中活动对象通过调用代理对象的调度接口,让代理对象执行获取脚本中待执行方法的调度标识的方法,在代理对象获取该调度标识后通过通信窗口将调度标识返回给活动对象。具体来说,首先独立进程解析按钮点击操作对应的脚本,获取该脚本中待执行的方法为使页面变黑,然后将脚本中待执行的方法的名称调到活动对象的IDispatch接口中,IDispatch接口为调度接口,用于调用不支持虚函数表的语言程序中的函数,IDispatch接口具有GetIDsOfNames函数和Invoke函数,其中GetIDsOfNames函数提供的是利用方法的名称返回其调度ID的方法,Invoke函数提供的是利用方法的调度ID执行方法的指令。由于活动对象对应的页面是空页面,它不具备使页面变黑的方法,所以活动对象无法获知脚本中该方法的调度标识(ID),那么活动对象通过通信窗口调用代理对象的IDispatch接口。由于代理对象对应的Web页面是完整的页面,通过调用代理对象的GetIDsOfNames函数提供的方法,可以让代理对象获取脚本中待执行方法的调度ID,然后代理对象通过通信窗口将该调度ID返回给活动对象。
随后,方法400进入步骤S403,其中活动对象拦截独立进程中执行脚本中待执行方法的指令,将该指令发送给代理对象。具体来说,在活动对象获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程独立进程下一步就将执行Invoke(ID)的指令,但本方法在这里拦截独立进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给代理对象。
随后,方法400进入步骤S404,其中代理对象通过执行指令,执行脚本中待执行方法,而后将执行结果返回给活动对象。具体来说,代理对象执行Invoke(ID)的指令,从而执行脚本中待执行的方法,使页面变黑,并将页面变黑的通知消息返回给活动对象。
图5示出了本发明中由活动对象执行代理对象的脚本的方法500的流程图。该方法适用于各类插件(包括第一类插件和第二类插件)的活动对象执行代理对象的脚本,即该方法是运行于页面进程中的页面控制独立进程中活动对象的方法。如果页面想要获取插件的信息(如版本号、路径、URL等属性)或者页面想要操作插件(如页面想要改变插件视窗的大小),都可以通过该方法来实现。如图5所示,方法500始于步骤S501,其中代理对象通过通信窗口将脚本发送给活动对象。以获取插件版本号为例,由于页面进程中的代理对象并不是真正的插件对象,它并不知道插件的版本号,因而代理对象不能直接向页面反馈插件的版本号。在独立进程创建完成活动对象之后,会向页面通知活动对象的变量,页面开发者根据该变量在页面中写入获取插件的版本号的脚本,该脚本中待执行的方法就是获取插件的版本号。代理对象通过通信窗口将获取插件的版本号的脚本发送给活动对象。
随后,方法500进入步骤S502,其中代理对象通过调用活动对象的调度接口,让活动对象执行获取脚本中待执行方法的调度标识的方法,在活动对象获取该调度标识后通过通信窗口将调度标识返回给代理对象。具体来说,首先页面解析脚本,将该脚本中待执行的方法的名称调到代理对象的IDispatch接口中,IDispatch接口为调度接口,用于调用不支持虚函数表的语言程序中的函数,IDispatch接口具有GetIDsOfNames函数和Invoke函数,其中GetIDsOfNames函数提供的是利用方法的名称返回其调度ID的方法,Invoke函数提供的是利用方法的调度ID执行方法的指令。由于代理对象无法获知脚本中待执行方法的调度标识(ID),所以代理对象通过通信窗口调用活动对象的IDispatch接口。而活动对象是真正的插件的对象,所以通过调用活动对象的GetIDsOfNames函数提供的方法,可以让活动对象获取待执行的方法的调度ID,然后活动对象通过通信窗口将该调度ID返回给代理对象。
随后,方法500进入步骤S503,其中代理对象拦截页面进程中执行脚本中待执行方法的指令,将该指令发送给活动对象。具体来说,在代理对象获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程下一步就会执行Invoke(ID)的指令,本方法在这里拦截页面进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给活动对象。
随后,方法500进入步骤S504,其中活动对象通过执行指令,执行脚本中待执行方法,而后将执行结果返回给代理对象。具体来说,活动对象执行Invoke(ID)的指令,从而执行脚本中待执行的方法,获取插件的版本号,并将插件的版本号返回给代理对象,然后代理对象会将插件的版本号反馈给页面。
根据上述进程间的脚本执行方法,使得代理对象可以执行活动对象的脚本,活动对象可以执行代理对象的脚本,从而实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制,以及运行于页面进程中的页面对运行于独立进程中的活动对象的控制。
图6示出了根据本发明一个实施例的用于浏览器的活动对象执行系统的结构框图。如图6所示,该系统包括页面进程模块610和独立进程模块620、位于页面进程模块610中的代理对象611和位于独立进程模块620中的活动对象621、以及在活动对象611和代理对象621中分别创建的通信窗口630。本系统中的活动对象为ActiveX插件对应的活动对象,该ActiveX插件可以为Flash、百度影音或QVOD(快播)等视频播放插件,但本发明不仅限于此。
页面进程模块610适于在活动对象创建之前,获知插件的类型;以及,拦截页面进程创建活动对象的过程,根据插件的类型,创建代理对象611替换实际要创建的活动对象,代理对象611在页面进程中运行。在页面中有ActiveX插件的情况下,在页面进程模块610创建ActiveX插件之前,首先查询注册表,查看与该插件相关的注册表中有没有声明该插件的脚本的安全性。若在注册表中已声明插件的脚本的安全性,则获知该插件为第一类插件,如Flash插件就属于第一类插件;若在注册表中没有声明插件的脚本的安全性,则获知该插件为第二类插件,如百度影音、QVOD等视频播放插件就属于第二类插件。
如果根据插件的类型获知插件为第二类插件,则页面进程模块610还适于拦截页面进程查询预创建活动对象的安全性接口,返回表示第二类插件为安全插件的信息。对于第二类插件,在查询注册表之后,创建预创建活动对象。在页面进程模块610查询预创建活动对象的IObjectSafety接口时,对于该接口进行拦截,向其返回指示了插件安全性的IObjectSatety接口,通过GetInterfaceSafetyOptions返回INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA,表示该插件是脚本安全的而且初始化安全的,由此可以顺利的通过安全性的检验。
当浏览器的页面进程创建活动对象时,页面进程模块610拦截CoGetClassObject,创建代理对象611替换实际要创建的活动对象,该代理对象611包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的代理对象611返回给页面进程的IUnknown指针。由此代理对象611创建完成。
独立进程模块620适于在页面进程激活代理对象611时,根据插件的类型,在独立于页面进程的独立进程中创建实际要创建的活动对象621,活动对象621在独立进程中运行。在页面进程激活代理对象611时,提取出该插件的属性、URL、大小等相关信息,然后创建一个独立进程。首先,创建一个文件(document),即空页面,在其中插入一个对象(object),该独立进程调用CoGetClassObject,独立进程模块620拦截该CoGetClassObject,创建一个活动对象621。该活动对象621包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的活动对象621返回给独立进程的IUnknown指针。由此活动对象621创建完成,该活动对象621是真正实现插件功能的对象。
如果根据插件的类型获知插件为第二类插件,独立进程模块620进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建实际要创建的活动对象621。
活动对象621和代理对象611通过通信窗口630进行通信,实现代理对象611调用活动对象621和/或活动对象621调用代理对象611。通过这两个通信窗口,两个对象可以针对插件的大小、焦点、刷新、脚本以及其它信息进行交互。
进一步的,当Web页面中有嵌套结构时,页面进程模块610包括多个代理对象,独立进程模块620包括多个活动对象,代理对象和活动对象一一对应,代理对象的通信窗口和与代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
在本系统中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了ActiveX插件的稳定性。而且本系统兼容于所有ActiveX插件,包括在注册表中声明其脚本安全性的插件以及没有声明其脚本安全性的插件。
图7示出了根据本发明另一个实施例的用于浏览器的活动对象执行系统的结构框图。在图6所示的系统的基础上,本系统中的位于页面进程模块710中的代理对象711和位于独立进程模块720中的活动对象721之间可以交互脚本,即代理对象711可以执行活动对象721的脚本,活动对象721也可以执行代理对象711的脚本。图7所示的系统中的代理对象711和活动对象721是在页面进程模块710获知插件为第一类插件的情况下创建的。
活动对象721包括第一发送模块722。代理对象711包括第一查询模块712和第一执行模块713。
第一发送模块722适于通过通信窗口730将脚本发送给代理对象711。以用户点击插件上创建的按钮,触发页面变黑为例,当用户点击插件上的按钮时,活动对象721获取按钮点击操作对应的脚本,由第一发送模块722将该脚本通过通信窗口730发送给代理对象711。
第一查询模块712适于查询页面进程中与脚本执行有关的接口,根据该接口获取脚本执行方法;第一执行模块713适于根据脚本执行方法执行脚本。在代理对象711接收到上述按钮点击操作对应的脚本之后,第一查询模块712查询和获取页面进程中的IHTMLWindow接口,IHTMLWindow接口为与脚本执行有关的接口,该IHTMLWindow接口中的ExecScript为用于执行脚本的函数,即ExecScript函数提供脚本执行方法。第一执行模块713根据ExecScript函数提供脚本执行方法执行上述按钮点击操作对应的脚本,使页面变黑。
代理对象711还包括第三发送模块714、第三调度标识获取模块715以及第三拦截模块716,其中第三调度标识获取模块715进一步包括第三调用模块717和第三调度标识接收模块718。活动对象721还包括第三接收模块723和第三执行模块724。
第三发送模块714适于通过通信窗口730将脚本发送给活动对象721。以获取插件版本号为例,由于页面进程中的代理对象711并不是真正的插件对象,它并不知道插件的版本号,因而代理对象711不能直接向页面反馈插件的版本号。在独立进程创建完成活动对象721之后,会向页面通知活动对象721的变量,页面开发者根据该变量在页面中写入获取插件的版本号的脚本,该脚本中待执行的方法就是获取插件的版本号。第三发送模块714通过通信窗口730将获取插件的版本号的脚本发送给活动对象721。
第三调度标识获取模块715适于通过调用活动对象721的调度接口,获取脚本中待执行方法的调度标识。其中,第三调用模块717适于通过调用活动对象721的调度接口,让活动对象721执行获取脚本中待执行方法的调度标识的方法获取调度标识;第三调度标识接收模块718适于接收活动对象721通过通信窗口730返回的调度标识。首先页面进程模块710解析脚本,将该脚本中待执行的方法的名称调到代理对象711的IDispatch接口中。由于代理对象711无法获知脚本中待执行方法的调度标识(ID),所以代理对象711的第三调用模块717通过通信窗口730调用活动对象721的IDispatch接口。而活动对象721是真正的插件的对象,所以通过调用活动对象721的GetIDsOfNames函数提供的方法,可以让活动对象721获取待执行的方法的调度ID,然后活动对象721通过通信窗口730将该调度ID返回给代理对象711的第三调度标识接收模块718。
第三拦截模块716适于拦截页面进程中执行脚本中待执行方法的指令,将指令发送给活动对象721。在代理对象711获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程下一步就会执行Invoke(ID)的指令,但在这里第三拦截模块716拦截页面进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给活动对象721。
第三接收模块723适于接收代理对象711中的第三发送模块714发送的脚本以及第三拦截模块716发送的指令;第三执行模块724适于通过执行指令,执行脚本中待执行方法,而后将执行结果返回给代理对象711。
根据上述功能模块实现的功能,使得第一类插件的代理对象可以执行活动对象的脚本,活动对象可以执行代理对象的脚本,从而实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制,以及运行于页面进程中的页面对运行于独立进程中的活动对象的控制。
图8示出了根据本发明又一个实施例的用于浏览器的活动对象执行系统的结构框图。在图6所示的系统的基础上,本系统中的位于页面进程模块810中的代理对象811和位于独立进程模块820中的活动对象821之间可以交互脚本,即代理对象811可以执行活动对象821的脚本,活动对象821也可以执行代理对象811的脚本。图8所示的系统中的代理对象811和活动对象821是在页面进程模块810获知插件为第二类插件的情况下创建的。
活动对象821包括第二发送模块822、第二调度标识获取模块823以及第二拦截模块824,其中第二调度标识获取模块823进一步包括第二调用模块825和第二调度标识接收模块826。代理对象811包括第二接收模块812和第二执行模块813。
第二发送模块822适于通过通信窗口830将脚本发送给代理对象811。以用户点击插件视窗上创建的按钮,触发页面变黑为例,当用户点击插件视窗上的按钮时,插件的活动对象821获取按钮点击操作对应的脚本,第二发送模块822将该脚本通过通信窗口830发送给代理对象811。
第二调度标识获取模块823适于通过调用代理对象811的调度接口,获取脚本中待执行方法的调度标识。其中,第二调用模块825适于调用代理对象811的调度接口,让代理对象811执行获取脚本中待执行方法的调度标识的方法获取调度标识;第二调度标识接收模块826适于接收代理对象811通过通信窗口830返回的调度标识。具体来说,首先独立进程模块820解析按钮点击操作对应的脚本,获取该脚本中待执行的方法为使页面变黑,然后将脚本中待执行的方法的名称调到活动对象821的IDispatch接口中。由于活动对象821对应的页面是空页面,它不具备使页面变黑的方法,所以活动对象821无法获知脚本中该方法的调度标识(ID),那么活动对象821的第二调用模块825通过通信窗口830调用代理对象811的IDispatch接口。由于代理对象811对应的Web页面是完整的页面,通过调用代理对象811的GetIDsOfNames函数提供的方法,可以让代理对象811获取脚本中待执行方法的调度ID,然后代理对象811通过通信窗口830将该调度ID返回给活动对象821的第二调度标识接收模块826。
第二拦截模块824适于拦截独立进程中执行脚本中待执行方法的指令,将指令发送给代理对象811。在活动对象821获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程独立进程下一步就将执行Invoke(ID)的指令,但在这里第二拦截模块824拦截独立进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给代理对象811。
第二接收模块812适于接收活动对象821的第二发送模块822发送的脚本和第二拦截模块824发送的指令;第二执行模块813适于通过执行指令,执行脚本中待执行的方法,而后将执行结果返回给活动对象821。第二执行模块813执行Invoke(ID)的指令,从而执行脚本中待执行的方法,使页面变黑,并将页面变黑的通知消息返回给活动对象821。
代理对象811还包括第三发送模块814、第三调度标识获取模块815、第三拦截模块816,其中第三调度标识获取模块815进一步包括第三调用模块817和第三调度标识接收模块818。活动对象821还包括第三接收模块827和第三执行模块828。
第三发送模块814适于通过通信窗口830将脚本发送给活动对象821。以获取插件版本号为例,由于页面进程中的代理对象811并不是真正的插件对象,它并不知道插件的版本号,因而代理对象811不能直接向页面反馈插件的版本号。在独立进程创建完成活动对象821之后,会向页面通知活动对象821的变量,页面开发者根据该变量在页面中写入获取插件的版本号的脚本,该脚本中待执行的方法就是获取插件的版本号。第三发送模块814的通过通信窗口830将获取插件的版本号的脚本发送给活动对象821。
第三调度标识获取模块815适于通过调用活动对象821的调度接口,获取脚本中待执行方法的调度标识。其中,第三调用模块817适于通过调用活动对象821的调度接口,让活动对象821执行获取脚本中待执行方法的调度标识的方法获取调度标识;第三调度标识接收模块818适于接收活动对象821通过通信窗口830返回的调度标识。首先页面进程模块810解析脚本,将该脚本中待执行的方法的名称调到代理对象811的IDispatch接口中。由于代理对象811无法获知脚本中待执行方法的调度标识(ID),所以代理对象811的第三调用模块817通过通信窗口830调用活动对象821的IDispatch接口。而活动对象821是真正的插件的对象,所以通过调用活动对象821的GetIDsOfNames函数提供的方法,可以让活动对象821获取待执行的方法的调度ID,然后活动对象821通过通信窗口830将该调度ID返回给代理对象811的第三调度标识接收模块818。
第三拦截模块816适于拦截页面进程中执行脚本中待执行方法的指令,将指令发送给活动对象821。在代理对象811获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程下一步就会执行Invoke(ID)的指令,但在这里第三拦截模块816拦截页面进程的Invoke(ID)的指令,将Invoke(ID)的指令发送给活动对象821。
第三接收模块827适于接收代理对象811中的第三发送模块814发送的脚本以及第三拦截模块816发送的指令;第三执行模块828适于通过执行指令,执行脚本中待执行方法,而后将执行结果返回给代理对象811。
根据上述功能模块实现的功能,使得第二类插件的代理对象可以执行活动对象的脚本,活动对象可以执行代理对象的脚本,从而实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制,以及运行于页面进程中的页面对运行于独立进程中的活动对象的控制。
本发明还提供了一种浏览器,该浏览器包括上述实施例所述的任一用于浏览器的活动对象执行系统。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的用于浏览器的活动对象执行系统及浏览器中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本文公开了A1、一种用于浏览器的活动对象执行方法,所述活动对象为插件对应的对象,所述方法包括:在活动对象创建之前,获知插件的类型;拦截页面进程创建活动对象的过程,根据所述插件的类型,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;在页面进程激活所述代理对象时,根据所述插件的类型,在独立于页面进程的独立进程中创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;在活动对象和代理对象中分别创建通信窗口;所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,如果根据所述插件的类型获知所述插件为第二类插件,在所述拦截页面进程创建活动对象的过程的步骤之前还包括:拦截页面进程查询预创建活动对象的安全性接口,返回表示所述第二类插件为安全插件的信息。A2、根据A1所述的方法,所述在独立于页面进程的独立进程中创建所述实际要创建的活动对象包括:拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。A3、根据A1或A2所述的方法,所述活动对象和代理对象通过所述通信窗口进行通信包括活动对象和代理对象之间的脚本执行过程。A4、根据A3所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由代理对象执行活动对象的脚本,如果根据所述插件的类型获知所述插件为第一类插件,则所述由代理对象执行活动对象的脚本的过程包括:所述活动对象通过通信窗口将脚本发送给所述代理对象;所述代理对象查询所述页面进程中与脚本执行有关的接口,根据该接口获取脚本执行方法;所述代理对象根据所述脚本执行方法执行所述脚本。A5、根据A3所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由代理对象执行活动对象的脚本,如果根据所述插件的类型获知所述插件为第二类插件,则所述由代理对象执行活动对象的脚本的过程包括:所述活动对象通过通信窗口将脚本发送给所述代理对象;所述活动对象通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识;所述活动对象拦截独立进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述代理对象;所述代理对象通过执行所述指令,执行所述脚本中待执行的方法,而后将执行结果返回给所述活动对象。A6、根据A5所述的方法,所述活动对象通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括:所述活动对象通过调用所述代理对象的调度接口,让所述代理对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述代理对象通过通信窗口将所述调度标识返回给所述活动对象。A7、根据A3所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由活动对象执行代理对象的脚本,所述由活动对象执行代理对象的脚本的过程包括:所述代理对象通过通信窗口将脚本发送给所述活动对象;所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识;所述代理对象拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象;所述活动对象通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。A8、根据A7所述的方法,所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括:所述代理对象通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述活动对象通过通信窗口将所述调度标识返回给所述代理对象。A9、根据A1至A8任一项所述的方法,运行于所述页面进程中的代理对象为多个,运行于所述独立进程中的活动对象为多个,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。A10、根据A4所述的方法,所述第一类插件为Flash插件。A11、根据A5所述的方法,所述第二类插件为百度影音或QVOD。
本文公开了B12、一种用于浏览器的活动对象执行系统,包括:页面进程模块,适于在活动对象创建之前,获知插件的类型;以及,拦截页面进程创建活动对象的过程,根据所述插件的类型,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;独立进程模块,适于在页面进程激活所述代理对象时,根据所述插件的类型,在独立于页面进程的独立进程中创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;位于所述页面进程模块中的代理对象、位于所述独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口,所述活动对象为插件对应的活动对象,所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,如果根据所述插件的类型获知所述插件为第二类插件,所述页面进程模块还适于拦截页面进程查询预创建活动对象的安全性接口,返回表示所述第二类插件为安全插件的信息。B13、根据B12所述的系统,所述独立进程模块进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。B14、根据B12所述的系统,如果根据所述插件的类型获知所述插件为第一类插件,所述活动对象包括:第一发送模块,适于通过通信窗口将脚本发送给所述代理对象;所述代理对象包括:第一查询模块,适于查询所述页面进程中与脚本执行有关的接口,根据该接口获取脚本执行方法;第一执行模块,适于根据所述脚本执行方法执行所述脚本。B15、根据B12或B13所述的系统,如果根据所述插件的类型获知所述插件为第二类插件,所述活动对象包括:第二发送模块,适于通过通信窗口将脚本发送给代理对象;第二调度标识获取模块,适于通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识;第二拦截模块,适于拦截独立进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述代理对象;所述代理对象包括:第二接收模块,适于接收所述活动对象的第二发送模块发送的脚本和第二拦截模块发送的指令;第二执行模块,适于通过执行所述指令,执行所述脚本中待执行的方法,而后将执行结果返回给所述活动对象。B16、根据B15所述的系统,所述第二调度标识获取模块包括:第二调用模块,适于调用所述代理对象的调度接口,让所述代理对象执行获取所述脚本中待执行方法的调度标识的方法获取所述调度标识;第二调度标识接收模块,适于接收所述代理对象通过通信窗口返回的调度标识。B17、根据B12或B13所述的系统,所述代理对象包括:第三发送模块,适于通过通信窗口将脚本发送给所述活动对象;第三调度标识获取模块,适于通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识;第三拦截模块,适于拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象;所述活动对象包括:第三接收模块,适于接收所述代理对象中的第三发送模块发送的脚本以及第三拦截模块发送的指令;第三执行模块,适于通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。B18、根据B17所述的系统,所述第三调度标识获取模块包括:第三调用模块,适于通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法获取调度标识;第三调度标识接收模块,适于接收所述活动对象通过通信窗口返回的所述调度标识。B19、根据B12至B18任一项所述的系统,所述页面进程模块包括多个代理对象,所述独立进程模块包括多个活动对象,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。B20、根据B14所述的系统,所述第一类插件为flash插件。B21、根据B15所述的系统,所述第二类插件为百度影音或QVOD。
本文公开了C22、一种包括B12至B21任一项所述的用于浏览器的活动对象执行系统的浏览器。
Claims (21)
1.一种用于浏览器的活动对象执行方法,所述活动对象为插件对应的对象,所述方法包括:
在活动对象创建之前,获知插件的类型;
拦截页面进程创建活动对象的过程,根据所述插件的类型,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
在页面进程激活所述代理对象时,提取出插件的属性、URL、大小信息,根据所述插件的类型,在独立于页面进程的独立进程中创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
在活动对象和代理对象中分别创建通信窗口;
所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,活动对象和代理对象针对插件的大小、焦点、刷新、脚本进行交互;所述活动对象和代理对象通过所述通信窗口进行通信包括活动对象和代理对象之间的脚本执行过程;
其中,如果根据所述插件的类型获知所述插件为第二类插件,在所述拦截页面进程创建活动对象的过程的步骤之前还包括:拦截页面进程查询预创建活动对象的安全性接口,返回表示所述第二类插件为安全插件的信息,其中,第二类插件为注册表中没有声明插件的脚本的安全性的插件。
2.根据权利要求1所述的方法,所述在独立于页面进程的独立进程中创建所述实际要创建的活动对象包括:拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。
3.根据权利要求1所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由代理对象执行活动对象的脚本,如果根据所述插件的类型获知所述插件为第一类插件,则所述由代理对象执行活动对象的脚本的过程包括:
所述活动对象通过通信窗口将脚本发送给所述代理对象;
所述代理对象查询所述页面进程中与脚本执行有关的接口,根据该接口获取脚本执行方法;
所述代理对象根据所述脚本执行方法执行所述脚本。
4.根据权利要求1所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由代理对象执行活动对象的脚本,如果根据所述插件的类型获知所述插件为第二类插件,则所述由代理对象执行活动对象的脚本的过程包括:
所述活动对象通过通信窗口将脚本发送给所述代理对象;
所述活动对象通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识;
所述活动对象拦截独立进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述代理对象;
所述代理对象通过执行所述指令,执行所述脚本中待执行的方法,而后将执行结果返回给所述活动对象。
5.根据权利要求1所述的方法,所述活动对象通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括:
所述活动对象通过调用所述代理对象的调度接口,让所述代理对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述代理对象通过通信窗口将所述调度标识返回给所述活动对象。
6.根据权利要求1所述的方法,所述活动对象和代理对象之间的脚本执行过程包括由活动对象执行代理对象的脚本,所述由活动对象执行代理对象的脚本的过程包括:
所述代理对象通过通信窗口将脚本发送给所述活动对象;
所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识;
所述代理对象拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象;
所述活动对象通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
7.根据权利要求6所述的方法,所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括:
所述代理对象通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述活动对象通过通信窗口将所述调度标识返回给所述代理对象。
8.根据权利要求1至7任一项所述的方法,运行于所述页面进程中的代理对象为多个,运行于所述独立进程中的活动对象为多个,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
9.根据权利要求3所述的方法,所述第一类插件为Flash插件。
10.根据权利要求4所述的方法,所述第二类插件为百度影音或QVOD。
11.一种用于浏览器的活动对象执行系统,包括:
页面进程模块,适于在活动对象创建之前,获知插件的类型;以及,拦截页面进程创建活动对象的过程,根据所述插件的类型,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
独立进程模块,适于在页面进程激活所述代理对象时,提取出插件的属性、URL、大小信息,根据所述插件的类型,在独立于页面进程的独立进程中创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
位于所述页面进程模块中的代理对象、位于所述独立进程模块中的活动对象以及在活动对象和代理对象中分别创建通信窗口,所述活动对象为插件对应的活动对象,所述活动对象和代理对象通过所述通信窗口进行通信,实现代理对象调用活动对象和/或活动对象调用代理对象;其中,活动对象和代理对象针对插件的大小、焦点、刷新、脚本进行交互;所述活动对象和代理对象通过所述通信窗口进行通信包括活动对象和代理对象之间的脚本执行过程;
其中,如果根据所述插件的类型获知所述插件为第二类插件,所述页面进程模块还适于拦截页面进程查询预创建活动对象的安全性接口,返回表示所述第二类插件为安全插件的信息,其中,第二类插件为注册表中没有声明插件的脚本的安全性的插件。
12.根据权利要求11所述的系统,所述独立进程模块进一步适于拦截独立进程查询IWebBrowser2接口,返回自创建的IWebBrowser2接口,从而创建所述实际要创建的活动对象。
13.根据权利要求11所述的系统,如果根据所述插件的类型获知所述插件为第一类插件,
所述活动对象包括:
第一发送模块,适于通过通信窗口将脚本发送给所述代理对象;
所述代理对象包括:
第一查询模块,适于查询所述页面进程中与脚本执行有关的接口,根据该接口获取脚本执行方法;
第一执行模块,适于根据所述脚本执行方法执行所述脚本。
14.根据权利要求11或12所述的系统,如果根据所述插件的类型获知所述插件为第二类插件,
所述活动对象包括:
第二发送模块,适于通过通信窗口将脚本发送给代理对象;
第二调度标识获取模块,适于通过调用所述代理对象的调度接口,获取所述脚本中待执行方法的调度标识;
第二拦截模块,适于拦截独立进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述代理对象;
所述代理对象包括:
第二接收模块,适于接收所述活动对象的第二发送模块发送的脚本和第二拦截模块发送的指令;
第二执行模块,适于通过执行所述指令,执行所述脚本中待执行的方法,而后将执行结果返回给所述活动对象。
15.根据权利要求14所述的系统,所述第二调度标识获取模块包括:
第二调用模块,适于调用所述代理对象的调度接口,让所述代理对象执行获取所述脚本中待执行方法的调度标识的方法获取所述调度标识;
第二调度标识接收模块,适于接收所述代理对象通过通信窗口返回的调度标识。
16.根据权利要求11或12所述的系统,
所述代理对象包括:
第三发送模块,适于通过通信窗口将脚本发送给所述活动对象;
第三调度标识获取模块,适于通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识;
第三拦截模块,适于拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象;
所述活动对象包括:
第三接收模块,适于接收所述代理对象中的第三发送模块发送的脚本以及第三拦截模块发送的指令;
第三执行模块,适于通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
17.根据权利要求16所述的系统,所述第三调度标识获取模块包括:
第三调用模块,适于通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法获取调度标识;
第三调度标识接收模块,适于接收所述活动对象通过通信窗口返回的所述调度标识。
18.根据权利要求11至13任一项所述的系统,所述页面进程模块包括多个代理对象,所述独立进程模块包括多个活动对象,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
19.根据权利要求13所述的系统,所述第一类插件为flash插件。
20.根据权利要求14所述的系统,所述第二类插件为百度影音或QVOD。
21.一种包括权利要求11至20任一项所述的用于浏览器的活动对象执行系统的浏览器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210572586.XA CN103019733B (zh) | 2012-12-25 | 2012-12-25 | 一种用于浏览器的活动对象执行方法、系统及浏览器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210572586.XA CN103019733B (zh) | 2012-12-25 | 2012-12-25 | 一种用于浏览器的活动对象执行方法、系统及浏览器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103019733A CN103019733A (zh) | 2013-04-03 |
CN103019733B true CN103019733B (zh) | 2016-07-06 |
Family
ID=47968371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210572586.XA Active CN103019733B (zh) | 2012-12-25 | 2012-12-25 | 一种用于浏览器的活动对象执行方法、系统及浏览器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103019733B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014101455A1 (zh) * | 2012-12-25 | 2014-07-03 | 北京奇虎科技有限公司 | 浏览器活动对象的执行方法、系统及浏览器 |
CN103577227B (zh) * | 2013-10-25 | 2017-01-18 | 北京奇虎科技有限公司 | 一种加载插件的方法、浏览器和服务器 |
CN103678134B (zh) * | 2013-12-23 | 2017-11-03 | 深圳Tcl新技术有限公司 | 浏览器待故障分析的脚本信息的获取方法及装置 |
CN103745621A (zh) * | 2014-01-16 | 2014-04-23 | 苏州阔地网络科技有限公司 | 一种在线同步课堂中智能导播方法及系统 |
CN104360907A (zh) * | 2014-12-05 | 2015-02-18 | 国家电网公司 | 一种事件调用方法及装置 |
CN105912930B (zh) * | 2016-04-11 | 2019-02-01 | 北京奇虎科技有限公司 | 移动终端及其系统资源安全控制方法 |
CN106406998A (zh) * | 2016-09-28 | 2017-02-15 | 北京奇虎科技有限公司 | 一种用户界面处理方法和装置 |
US10140165B2 (en) * | 2017-02-02 | 2018-11-27 | Microsoft Technology Licensing, Llc | Shell action browser extensions |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314510A (zh) * | 2011-09-15 | 2012-01-11 | 奇智软件(北京)有限公司 | 一种浏览器控件执行方法及系统 |
CN103019735A (zh) * | 2012-12-25 | 2013-04-03 | 北京奇虎科技有限公司 | 浏览器活动对象的执行方法、系统及浏览器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7490332B2 (en) * | 2003-04-04 | 2009-02-10 | Sesma Systems, Inc. | System and method for accessing ActiveX objects in a platform dependent environment from objects in a platform independent environment |
-
2012
- 2012-12-25 CN CN201210572586.XA patent/CN103019733B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102314510A (zh) * | 2011-09-15 | 2012-01-11 | 奇智软件(北京)有限公司 | 一种浏览器控件执行方法及系统 |
CN103019735A (zh) * | 2012-12-25 | 2013-04-03 | 北京奇虎科技有限公司 | 浏览器活动对象的执行方法、系统及浏览器 |
Non-Patent Citations (1)
Title |
---|
VB的多接口技术及安全性控件的制作;杨莉萍;《计算机系统应用》;20010430;第55-58页 * |
Also Published As
Publication number | Publication date |
---|---|
CN103019733A (zh) | 2013-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019733B (zh) | 一种用于浏览器的活动对象执行方法、系统及浏览器 | |
EP3816823A1 (en) | Webpage rendering method, device, electronic apparatus and storage medium | |
US8166396B2 (en) | User interface rendering | |
CN107992301B (zh) | 用户界面实现方法、客户端及存储介质 | |
CN103942225B (zh) | 一种混合型应用客户端的资源调用方法、客户端及系统 | |
EP3822828A2 (en) | Method, apparatus, device and storage medium for determining page theme and computer program product | |
US20150161277A1 (en) | Methods and systems for one browser version to use a rendering engine of another browser version for displaying information | |
US10379707B2 (en) | Providing a user interface with configurable interface components | |
CN110704136A (zh) | 小程序组件的渲染方法、客户端、电子设备及存储介质 | |
US10394627B2 (en) | Asynchronous C#-JS data binding bridge | |
US20180095604A1 (en) | Rendering components based on screen size | |
CN105335132B (zh) | 一种自定义应用程序功能的方法、装置以及系统 | |
CN109445841B (zh) | 接口文档管理方法、装置、服务器及存储介质 | |
CN108762956A (zh) | 获取Native本地数据的方法、服务器、移动终端及存储介质 | |
CN103034503B (zh) | 一种脚本执行方法、系统及浏览器 | |
CN103019734B (zh) | 一种活动对象执行方法、系统及浏览器 | |
US20160291808A1 (en) | Dynamically created contextual information via a browser extension | |
GB2529377A (en) | Communication between frames of a web browser | |
CN103064709B (zh) | 浏览器活动对象的执行方法、系统及浏览器 | |
CN103019735B (zh) | 浏览器活动对象的执行方法、系统及浏览器 | |
CN114816401A (zh) | 界面元素的定位方法、电子设备及存储介质 | |
CN110389899B (zh) | 检测js程序的api数据类型的方法装置、介质和设备 | |
CN103544271B (zh) | 一种浏览器中加载图片处理窗口的方法和装置 | |
US10218767B2 (en) | Method, system and browser for executing active object of browser | |
CN103077016B (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220803 Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015 Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park) Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd. Patentee before: Qizhi software (Beijing) Co.,Ltd. |
|
TR01 | Transfer of patent right |