一种活动对象创建方法、装置及浏览器的制作方法

文档序号:6385471阅读:253来源:国知局
专利名称:一种活动对象创建方法、装置及浏览器的制作方法
技术领域
本发明涉及计算机网络技术领域,具体涉及一种活动对象创建方法、装置及浏览器。
背景技术
ActiveX插件以前也叫做0LE(0bject Linking and Embedding,对象链接与嵌入)控件或OCX (OLE Control extension,对象类别扩充)控件,它是一些软件组件或对象,可以将其嵌入到WEB网页或其它应用程序中。当在浏览器中加载ActiveX插件时,也可称该ActiveX插件为活动对象。如果ActiveX插件被嵌入到网页中,在用户打开网页时,会自动触发ActiveX插件的加载和播放。目前,很多网页上都嵌入有各种音视频插件,例如Flash插件,其内容可能是一些广告或用户并不关心的内容。只要用户打开网页就会在第一时间自动加载播放这些Flash内容。对于用户来说,这种不必要的插件播放造成了用户资源的浪费,例如浪费电力、带宽和系统资源,而且还延长了页面打开时间。现有技术提供了一种拦截Flash创建的方法,使用自带的swf,替换需要创建的Flash来实现,swf是Flash本地的一种支持矢量和点阵图形的动画文件格式。但是由于在页面的创建过程中可能需要与Flash进行交互,如果将Flash替换为swf,则因无法完成交互而无法创建Flash。当用户需要重新播放Flash时,必须刷新页面,重新创建Flash才能进行播放。

发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的活动对象创建方法和相应的活动对象创建装置及浏览器。根据本发明的一个方面,提供了另一种活动对象创建方法,包括在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行修改,阻止执行所述活动对象实现的功能;根据用户发起的执行所述活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行再修改,继续执行所述活动对象实现的功能。根据本发明的另一方面,提供了另一种活动对象创建装置,包括阻止模块,适于在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行修改,阻止执行所述活动对象实现的功能;执行模块,适于根据用户发起的执行所述活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行再修改,继续执行所述活动对象实现的功能。根据本发明的再一方面,提供了一种包括上述活动对象创建装置的浏览器。根据本发明的一个方面提供的方案,在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或对活动对象的属性进行修改,阻止执行活动对象实现的功能;在用户发起执行活动对象实现的功能的请求后,通过取消拦截线程消息循环中的定时消息或对活动对象的属性进行再修改,继续执行活动对象实现的功能。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求执行活动对象实现的功能时,无需刷新页面,实现了活动对象实现的功能的即点即执行。根据本发明的一个方面提供的方案,在浏览器的页面进程创建活动对象之前,默认阻止创建该活动对象;在用户发起执行活动对象实现的功能的请求后,继续创建活动对象,并在活动对象创建完成后,执行活动对象实现的功能。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求执行活动对象实现的功能时,无需刷新页面,实现了活动对象实现的功能的即点即执行。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式



通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中图1示出了根据本发明第一个实施例的活动对象创建方法的流程图;图2示出了根据本发明第二个实施例的活动对象创建方法的流程图;图3示出了根据本发明第三个实施例的活动对象创建方法的流程图;图4示出了根据本发明第四个实施例的活动对象创建方法的流程图;图5示出了根据本发明第五个实施例的活动对象创建装置的结构框图;图6示出了根据本发明第六个实施例的活动对象创建装置的结构框图;图7示出了根据本发明第七个实施例的活动对象创建装置的结构框图;图8示出了根据本发明第八个实施例的活动对象创建装置的结构框图。
具体实施例方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。在以下几个实施例中,以创建Flash插件为例进行说明,但本发明不仅限于是Flash插件,还可以是其它ActiveX插件,如百度影音、QVOD (快播)等插件。图1示出了根据本发明第一个实施例的活动对象创建方法100的流程图。如图1所示,方法100始于步骤S101,其中在浏览器的页面进程创建Flash插件之前,阻止创建该Flash插件。具体来说,在页面中有Flash插件的情况下,浏览器的页面进程通过CLSIDFromProgID方法获取Flash插件的类标识(CLSID)或者组件的字符串标识符(ProgID),按照现有流程,随后页面进程根据Flash插件的CLSID或ProgID查询注册表,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。但本方法与现有流程不同的是,在获取CLSID或ProgID后,判断其是否为Flash插件的CLSID或ProgID,若是则停止执行查询注册表的动作,这样该Flash插件就不会被创建。需要说明的是,停止执行查询注册表的动作是阻止创建Flash插件的一种可选的实施方式,本方法也可在查询注册表确认已安装Flash插件之后,阻止进一步创建该Flash插件。通过本步骤,虽然页面中有Flash插件,但在页面打开后由于阻止创建该Flash插件,页面中并不会播放对应的Flash内容。随后,方法100进入步骤S102,其中根据用户发起的执行Flash插件功能的请求,继续创建Flash插件,在创建完成后执行Flash插件的功能,即播放对应的Flash内容。在页面打开后,如果用户想要观看Flash内容,可以点击播放Flash,页面进程收到用户点击播放Flash的请求,不再阻止Flash插件的创建,继续创建Flash插件。以之前停止执行查询注册表的动作为例,页面进程根据Flash插件的CLSID或ProgID继续执行查询注册表的操作,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。在Flash插件创建完成后,按照默认的属性就会播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。根据本实施例提供的活动对象创建方法,在浏览器的页面进程创建Flash插件之前,默认阻止创建该Flash插件;在用户发起播放Flash的请求后,继续创建Flash插件,并在Flash插件创建完成后,播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本实施例提供的方法在加载页面时,默认阻止创建Flash插件,将有限的资源用于加载页面,提升了页面的加载速度。图2示出了根据本发明第二个实施例的活动对象创建方法200的流程图。与上述第一个实施例不同的是,在用户发起执行活动对象实现的功能的请求之后,通过在页面进程中创建代理对象,而在独立进程中继续创建活动对象,使得真实的Flash插件与页面进程分离。如图2所示,方法200始于步骤S201,在浏览器的页面进程创建Flash插件之前,阻止创建该Flash插件。在页面中有Flash插件的情况下,浏览器的页面进程通过CLSIDFromProgID 方法获取 Flash 插件的 CLSID 或者 ProgID,在获取 CLSID 或 ProgID 后,判断其是否为Flash插件的CLSID或ProgID,若是则停止执行查询注册表的动作,这样该Flash插件就不会被创建。停止执行查询注册表的动作是阻止创建Flash插件的一种可选的实施方式,本方法也可在查询注册表确认已安装Flash插件之后,阻止进一步创建该Flash插件。通过本步骤,虽然页面中有Flash插件,但在页面打开后由于阻止创建该Flash插件,页面中并不会播放对应的Flash内容。随后,方法200进入步骤S202,其中根据用户发起的执行Flash插件功能的请求,截获浏览器的页面进程创建Flash插件活动对象的操作,在浏览器的页面进程创建Flash插件代理对象替换实际要创建的Flash插件活动对象,该Flash插件代理对象在页面进程中运行。具体来说,在页面打开后,如果用户想要观看Flash内容,可以点击播放Flash,页面进程收到用户点击播放Flash的请求,不再阻止Flash插件的创建,继续创建Flash插件。以之前停止执行查询注册表的动作为例,页面进程根据Flash插件的CLSID或ProgID继续执行查询注册表的操作,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。这里,在页面进程准备进一步创建Flash插件时,拦截CoGetClassOb ject,创建Flash插件代理对象,该Flash插件代理对象包括一系列接口,包括IUnknown指针(本文也称为接口指针)将会调用的很多标准接口,例如IOleObject、IViewObject 等。然后在调用 IClassFactory 的 CreateInstance 时,将所创建的 Flash 插件代理对象返回给页面进程的IUnknown指针。随后,方法200进入步骤S203,其中创建独立于页面进程的独立进程,在该独立进程中,仓Il建Flash插件活动对象,这里的Flash插件活动对象才是真正的Flash插件。具体地,在页面进程激活Flash插件代理对象时,提取出该Flash插件的属性、URL、大小等相关信息,然后创建一个独立进程。具体来说,创建一个文件(document),在其中插入一个对象(object),该独立进程调用CoGetClassObject,拦截该CoGetClassObject,创建一个Flash插件活动对象。该Flash插件活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的Flash插件活动对象返回给独立进程的IUnknown指针。接着,在Flash插件代理对象和Flash插件活动对象中分别创建与插件对象关联的窗口,用于使Flash插件代理对象和Flash插件活动对象进行通信。通过这两个窗口,两个对象可以针对Flash的大小、焦点、刷新、脚本以及其它信息进行交互。随后,方法200进入步骤S204,通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,和/或,Flash插件代理对象与独立进程通信被Flash插件活动对象调用,执行Flash插件活动对象实现的功能。在Flash插件活动对象创建完成后,根据用户点击播放Flash的请求,通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,使Flash插件活动对象播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。根据本实施例提供的活动对象创建方法,在浏览器的页面进程创建Flash插件之前,默认阻止创建该Flash插件;在用户发起播放Flash的请求后,在独立进程中创建真正的Flash插件,并在真正的Flash插件创建完成后,通过调用真正的Flash插件播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本实施例提供的方法在加载页面时,默认阻止创建Flash插件,将有限的资源用于加载页面,提升了页面的加载速度。进一步的,在本方法中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的Flash插件与页面进程分离,从而使Flash插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当Flash插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响Flash插件的正常运行,提高了插件的稳定性。图3示出了根据本发明第三个实施例的活动对象创建方法300的流程图。如图3所示,方法300始于步骤S301,其中在浏览器的页面进程创建Flash插件之后,通过拦截线程消息循环中的定时消息或通过对Flash插件的属性进行修改,阻止执行Flash插件实现的功能,即阻止Flash插件播放对应的Flash内容。在页面中有Flash插件的情况下,浏览器的页面进程通过CLSIDFromProgID方法获取Flash插件的CLSID或者ProgID,随后页面进程根据Flash插件的CLSID或ProgID查询注册表,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。页面进程通过调用CoGetClassObject得到Flash插件的IUnknown指针,根据IUnknown指针调用标准接口进行相关操作,由此完成Flash插件的创建。其中CoGetClassObject执行过程为通过CLSID去注册表查询ActiveX路径,获得ActiveX路径后,调用LoadLibrary加载Flash插件,调用导出函数 DllGetClassObject 获得类厂指针(IClassFactory),然后调用 IClassFactory 的CreatInstance方法得到Flash插件对应的IUnknown指针。在得到IUnknown指针的情况下,通过调用相关接口可以获取Flash插件的默认属性,并对其进行修改。通常情况下,Flash插件的默认属性为播放,此时将Flash插件的默认属性由播放修改为暂停或停止,就达到了阻止Flash插件播放Flash内容的目的。具体来说,根据Flash插件的IUnknown指针,可以查找到记录Flash插件属性的函数,调用该函数就可对Flash插件的属性进行修改。对Flash插件的属性进行修改是阻止Flash插件播放Flash内容的一种可选的实现方式,这种实现方式适用于播放动画的Flash插件。本方法还提供了另一种阻止Flash插件播放Flash内容的实现方式,即拦截线程消息循环中的定时消息,这种实现方式的适用范围更广,播放动画和视频的Flash插件都适用。具体来说,线程消息循环中的定时消息(如0x401消息)是Flash插件的驱动消息,Flash插件只有定时接收到该定时消息,才会执行其相应的功能,本方法通过拦截该定时消息,使Flash插件接收不到这个消息,那么Flash插件就不会播放对应的Flash内容。可选地,在步骤S301之后,方法300进入步骤S302,其中拦截Flash插件的绘制函数,调用自定义的绘制函数绘制自定义界面,在浏览器的指定位置显示该自定义界面。在经过步骤S301阻止播放Flash内容后,在浏览器的原本该显示Flash内容的指定位置就会出现停止播放的界面,本方法可以将该停止播放的界面替换为自定义界面,例如空屏、自定义图片或自定义Flash等。具体采用的方法就是拦截Flash插件的绘制函数,该绘制函数用于绘制停止播放的界面,调用自定义的绘制函数绘制自定义界面并显示。随后,方法300进入步骤S303,其中根据用户发起的执行Flash插件实现的功能的请求,通过取消拦截线程循环中的定时消息或者通过对Flash插件的属性进行再修改,继续执行Flash插件实现的功能,即继续播放Flash内容。若在步骤S301中通过对Flash插件的属性进行修改来阻止Flash插件播放Flash内容,本步骤则对Flash插件的属性进行再修改,即将Flash插件的属性由暂停或停止修改为播放,这样Flash插件就可以继续播放对应的Flash内容。若在步骤S301中通过拦截定时消息阻止Flash插件播放Flash内容,本步骤则取消拦截该定时消息,使Flash插件继续播放对应的Flash内容。根据本实施例提供的活动对象创建方法,在浏览器的页面进程创建Flash插件之后,通过拦截线程消息循环中的定时消息或对Flash插件的属性进行修改,阻止Flash插件播放Flash内容;在用户发起播放Flash的请求后,通过取消拦截线程消息循环中的定时消息或对Flash插件的属性进行再修改,使Flash插件继续播放Flash内容,由此实现了Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本方法在阻止Flash插件播放Flash内容时,已经创建了 Flash插件,在用户再发起播放Flash的请求后,不需要再创建Flash插件,可以直接启动播放,响应时间较短。图4示出了根据本发明第四个实施例的活动对象创建方法400的流程图。与上述第三个实施例不同的是,本实施例是在页面进程中创建代理对象,而在独立进程中继续创建活动对象,使得真实的Flash插件与页面进程分离。如图4所示,方法400始于步骤S401,截获浏览器的页面进程创建Flash插件活动对象的操作,在浏览器的页面进程创建Flash插件代理对象替换实际要创建的Flash插件活动对象,该Flash插件代理对象在页面进程中运行。具体来说,在页面中有Flash插件的情况下,在页面进程准备创建Flash插件时,拦截CoGetClassObj ect,创建Flash插件代理对象,该Flash插件代理对象包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如IOleOb ject、IViewOb ject等。然后在调用IClassFactory的CreateInstance时,将所创建的Flash插件代理对象返回给页面进程的IUnknown指针。随后,方法400进入步骤S402,其中创建独立于页面进程的独立进程,在该独立进程中,仓Il建Flash插件活动对象,这里的Flash插件活动对象才是真正的Flash插件。具体地,在页面进程激活Flash插件代理对象时,提取出该Flash插件的属性、URL、大小等相关信息,然后创建一个独立进程。具体来说,创建一个文件(document),在其中插入一个对象(object),该独立进程调用CoGetClassObject,拦截该CoGetClassObject,创建一个Flash插件活动对象。该Flash插件活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的Flash插件活动对象返回给独立进程的IUnknown指针。接着,在Flash插件代理对象和Flash插件活动对象中分别创建与插件对象关联的窗口,用于使Flash插件代理对象和Flash插件活动对象进行通信。通过这两个窗口,两个对象可以针对Flash的大小、焦点、刷新、脚本以及其它信息进行交互。随后,方法400进入步骤S403,其中通过拦截线程消息循环中的定时消息或通过对Flash插件活动对象的属性进行修改,阻止执行Flash插件活动对象实现的功能,即阻止Flash插件播放对应的Flash内容。本步骤的相关内容与实施例三类似,不同之处在于本步骤是在独立进程中执行的,而实施例三的相应步骤是在页面进程中执行的。可选地,在步骤S403之后,方法400进入步骤S404,其中调用自定义的绘制函数绘制自定义界面,在浏览器的指定位置显示该自定义界面。在经过步骤S403阻止播放Flash内容后,在浏览器的原本该显示Flash内容的指定位置就会出现停止播放的界面,本方法可以将该停止播放的界面替换为自定义界面,如空屏、自定义图片或自定义Flash等。具体可以采用以下两种方法I)在独立进程中拦截Flash插件活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面,通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,在浏览器的指定位置显示自定义界面。具体来说,在独立进程中拦截Flash插件活动对象的绘制函数,该绘制函数用于绘制停止播放的界面,调用自定义的绘制函数绘制自定义界面,通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,将该自定义界面通过创建的窗口发送给Flash插件代理对象,在指定位置显示该自定义界面。2)在页面进程中拦截Flash插件代理对象与独立进程通信调用Flash插件活动对象的动作,调用自定义的绘制函数绘制自定义界面,在浏览器的指定位置显示自定义界面。具体来说,在独立进程中通过调用Flash插件活动对象的绘制函数绘制停止播放的界面,通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,可将该停止播放的界面通过创建的窗口发送给Flash插件代理对象,此时在页面进程中拦截该动作,调用自定义的绘制函数绘制自定义界面,在指定位置显示该自定义界面。随后,方法400进入步骤S405,其中根据用户发起的执行Flash插件实现的功能的请求,通过取消拦截线程循环中的定时消息或者通过对Flash插件的属性进行再修改,继续执行Flash插件实现的功能,即继续播放Flash内容。其中继续执行Flash插件实现的功能是通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,和/或,Flash插件代理对象与独立进程通信被Flash插件活动对象调用而实现的。而取消拦截线程循环中的定时消息或者通过对Flash插件的属性进行再修改是在独立进程中进行的。根据本实施例提供的活动对象创建方法,在浏览器的页面进程创建Flash插件代理对象,在独立进程中创建真正的Flash插件,并在真正的Flash插件创建完成后,通过拦截线程消息循环中的定时消息或对Flash插件的属性进行修改,阻止Flash插件播放Flash内容;在用户发起播放Flash的请求后,通过取消拦截线程消息循环中的定时消息或对Flash插件的属性进行再修改,使Flash插件继续播放Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本方法在阻止Flash插件播放Flash内容时,已经创建了 Flash插件,在用户再发起播放Flash的请求后,不需要再创建Flash插件,可以直接启动播放,响应时间较短。进一步的,在本方法中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的Flash插件与页面进程分离,从而使Flash插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当Flash插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响Flash插件的正常运行,提高了插件的稳定性。图5示出了根据本发明第五个实施例的活动对象创建装置的结构框图。如图5所示,该装置包括阻止模块510、第一创建模块520和执行模块530。进一步的,阻止模块510、第一创建模块520和执行模块530都是页面进程模块500的子模块。其中,阻止模块510适于在浏览器创建活动对象之前,在页面进程中阻止创建活动对象。第一创建模块520根据用户发起的执行活动对象实现的功能的请求,继续在页面进程中创建活动对象。执行模块530适于在第一创建模块520创建活动对象之后,执行活动对象实现的功能。以Flash插件为例,在页面创建Flash插件之前,页面进程通过CLSIDFromProgID方法获取Flash插件的CLSID或者ProgID,判断其是否为Flash插件的CLSID或ProgID,若是阻止模块510阻止第一创建模块520的动作,使其停止执行查询注册表,从而阻止创建Flash插件。在页面进程收到用户点击播放Flash的请求后,阻止模块510解除阻止,第一创建模块520根据Flash插件的CLSID或ProgID继续执行查询注册表的操作,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。在Flash插件创建完成后,执行模块530按照默认的属性就会播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。根据本实施例提供的活动对象创建装置,在浏览器的页面进程创建Flash插件之前,阻止模块默认阻止创建该Flash插件;在用户发起播放Flash的请求后,第一创建模块继续创建Flash插件,并在Flash插件创建完成后,执行模块播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本实施例提供的装置在加载页面时,默认阻止创建Flash插件,将有限的资源用于加载页面,提升了页面的加载速度。图6示出了根据本发明第六个实施例的活动对象创建装置的结构框图。如图6所示,该装置包括页面进程模块610和独立进程模块620,以及分别在页面进程模块610和独立进程模块620中创建的通信窗口 630。其中页面进程模块610包括子模块阻止模块611和第二创建模块612 ;独立进程模块620包括子模块第一创建模块621和执行模块622。阻止模块611适于在浏览器创建活动对象之前,在页面进程中阻止创建活动对象。第二创建模块612适于根据用户发起的执行活动对象实现的功能的请求,截获浏览器的页面进程加载活动对象的操作,在浏览器的页面进程创建代理对象替换实际要创建的活动对象,代理对象在页面进程中运行。第一创建模块621适于在独立于浏览器的页面进程的独立进程中,创建活动对象。执行模块622通过代理对象经由通信窗口 630与独立进程通信调用活动对象,和/或,代理对象经由通信窗口 630与独立进程通信被活动对象调用,执行活动对象实现的功能。以Flash插件为例,在页面创建Flash插件之前,页面进程通过CLSIDFromProgID方法获取Flash插件的CLSID或者ProgID,判断其是否为Flash插件的CLSID或ProgID,若是阻止模块611阻止第二创建模块612的动作,使其停止执行查询注册表,从而阻止创建Flash插件。在页面进程收到用户点击播放Flash的请求后,阻止模块611解除阻止,第二创建模块612根据Flash插件的CLSID或ProgID继续执行查询注册表的操作,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。这里,在页面进程准备进一步创建Flash插件时,第二创建模块612拦截CoGetClassOb ject,创建Flash插件代理对象,该Flash插件代理对象包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如 IOleOb ject、IViewOb ject 等。然后在调用 IClassFactory 的 CreateInstance时,将所创建的Flash插件代理对象返回给页面进程的IUnknown指针。在页面进程激活Flash插件代理对象时,提取出该Flash插件的属性、URL、大小等相关信息,然后由独立进程模块620创建一个独立进程。在该独立进程调用CoGetClassObject时,第一创建模块621拦截该CoGetClassObject,创建一个Flash插件活动对象。该Flash插件活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如IOleOb ject、IViewOb ject等。然后在调用IClassFactory的CreateInstance时,将所创建的Flash插件活动对象返回给独立进程的IUnknown指针。在Flash插件活动对象创建完成后,根据用户点击播放Flash的请求,执行模块622通过Flash插件代理对象与独立进程通信调用Flash插件活动对象,使Flash插件活动对象播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。
根据本实施例提供的活动对象创建装置,在浏览器的页面进程创建Flash插件之前,阻止模块默认阻止创建该Flash插件;在用户发起播放Flash的请求后,第一创建模块在独立进程中创建真正的Flash插件,并在真正的Flash插件创建完成后,执行模块通过调用真正的Flash插件播放对应的Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了Flash内容的即点即播。而且,本实施例提供的装置在加载页面时,默认阻止创建Flash插件,将有限的资源用于加载页面,提升了页面的加载速度。进一步的,在本装置中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的Flash插件与页面进程分离,从而使Flash插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当Flash插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响Flash插件的正常运行,提高了插件的稳定性。图7示出了根据本发明第七个实施例的活动对象创建装置的结构框图。如图7所示,该装置包括阻止模块710和执行模块720。进一步的,阻止模块710和执行模块720是页面进程模块700的子模块。其中,阻止模块710适于在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对活动对象的属性进行修改,阻止执行活动对象实现的功能。执行模块720适于根据用户发起的执行活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对活动对象的属性进行再修改,继续执行活动对象实现的功能。以Flash插件为例,在页面中有Flash插件的情况下,浏览器的页面进程通过CLSIDFromProgID方法获取Flash插件的CLSID或者ProgID,随后页面进程根据Flash插件的CLSID或ProgID查询注册表,用以查看系统是否已安装该插件,若查看已安装该插件则进一步创建该Flash插件。页面进程通过调用CoGetClassObject得到Flash插件的IUnknown指针,根据IUnknown指针调用标准接口进行相关操作,由此完成Flash插件的创建。在得到IUnknown指针的情况下,阻止模块710可以根据IUnkown指针查找到记录Flash插件属性的函数,调用该函数就可对Flash插件的属性进行修改,如将Flash插件的默认属性由播放修改为暂停或停止,就达到了阻止Flash插件播放Flash内容的目的。阻止模块710也可以拦截线程消息循环中的定时消息,如0x401消息,阻止Flash插件播放Flash内容。在用户发起的执行Flash插件实现的功能的请求后,执行模块720可以通过对Flash插件的属性进行再修改,如将Flash插件的属性由暂停或停止修改为播放,这样Flash插件就可以继续播放对应的Flash内容。执行模块720也可以通过取消拦截该定时消息,使Flash插件继续播放对应的Flash内容。可选的,该装置还可以包括绘制模块730,绘制模块730也是页面进程模块700的子模块。绘制模块730适于拦截活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面,在浏览器的指定位置显示自定义界面。通过绘制模块730可以将该停止播放的界面替换为自定义界面,如空屏、自定义图片或自定义Flash等。根据本实施例提供的活动对象创建装置,在浏览器的页面进程创建Flash插件之后,阻止模块通过拦截线程消息循环中的定时消息或对Flash插件的属性进行修改,阻止Flash插件播放Flash内容;在用户发起播放Flash的请求后,执行模块通过取消拦截线程消息循环中的定时消息或对Flash插件的属性进行再修改,使Flash插件继续播放Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本装置在阻止Flash插件播放Flash内容时,已经创建了 Flash插件,在用户再发起播放Flash的请求后,不需要再创建Flash插件,可以直接启动播放,响应时间较短。图8示出了根据本发明第八个实施例的活动对象创建装置的结构框图。如图8所示,该装置包括页面进程模块810和独立进程模块820,以及分别在页面进程模块810和独立进程模块820中创建的通信窗口 830。其中页面进程模块810包括子模块第一创建模块811 ;独立进程模块820包括子模块第二创建模块821、阻止模块822和执行模块823。第一创建模块811适于截获浏览器的页面进程加载活动对象的操作,在浏览器的页面进程创建代理对象替换实际要创建的活动对象,代理对象在页面进程中运行。第二创建模块821适于在独立于页面进程的独立进程中创建活动对象。阻止模块822适于在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对活动对象的属性进行修改,阻止执行活动对象实现的功能。执行模块823适于根据用户发起的执行活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对活动对象的属性进行再修改,继续执行活动对象实现的功能。执行模块823进一步适于通过代理对象经由通信窗口 830与独立进程通信调用活动对象,和/或,代理对象经由通信窗口 830与独立进程通信被活动对象调用,继续执行活动对象实现的功能。以Flash插件为例,在页面中有Flash插件的情况下,在第一创建模块811准备创建Flash插件时,拦截CoGetClassObject,创建Flash插件代理对象,该Flash插件代理对象包括一系列接口,包括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject 等。然后在调用 IClassFactory 的 CreateInstance 时,将所创建的 Flash 插件代理对象返回给页面进程的IUnknown指针。在页面进程激活Flash插件代理对象时,提取出该Flash插件的属性、URL、大小等相关信息,然后由独立进程模块820创建一个独立进程。在独立进程调用CoGetClassOb ject,第二创建模块821拦截该CoGetClassOb ject,创建一个Flash插件活动对象。该Flash插件活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如I01e0bject、IView0bject等。然后在调用IClassFactory的CreateInstance时,将所创建的Flash插件活动对象返回给独立进程的IUnknown指针。阻止模块822通过拦截线程消息循环中的定时消息(如0x401消息)或通过对Flash插件活动对象的属性进行修改,阻止执行Flash插件活动对象实现的功能,即阻止Flash插件播放对应的Flash内容。进一步的,阻止模块822是根据IUnknown指针查找到记录Flash插件属性的函数,调用该函数就可对Flash插件的属性进行修改。在用户发起的执行Flash插件实现的功能的请求之后,执行模块823通过取消拦截线程循环中的定时消息或者通过对Flash插件的属性进行再修改,继续执行Flash插件实现的功能,即继续播放Flash内容。可选的,独立进程模块820还可以包括绘制模块824,适于在独立进程中拦截活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面。页面进程模块810包括显示模块812,适于通过代理对象与独立进程通信调用活动对象,在浏览器的指定位置显示自定义界面。作为另一种可替换的实现方式,页面进程模块包括绘制模块,适于在页面进程中拦截代理对象与独立进程通信调用活动对象的动作,调用自定义的绘制函数绘制自定义界面,在浏览器的指定位置显示自定义界面。根据本实施例提供的活动对象创建装置,在浏览器的页面进程创建Flash插件代理对象,在独立进程中创建真正的Flash插件,并在真正的Flash插件创建完成后,阻止模块通过拦截线程消息循环中的定时消息或对Flash插件的属性进行修改,阻止Flash插件播放Flash内容;在用户发起播放Flash的请求后,执行模块通过取消拦截线程消息循环中的定时消息或对Flash插件的属性进行再修改,使Flash插件继续播放Flash内容,由此实现了 Flash插件对应的Flash内容的即点即播。与现有技术相比,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求播放Flash内容时,无需刷新页面,实现了 Flash内容的即点即播。而且,本装置在阻止Flash插件播放Flash内容时,已经创建了 Flash插件,在用户再发起播放Flash的请求后,不需要再创建Flash插件,可以直接启动播放,响应时间较短。进一步的,在本装置中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的Flash插件与页面进程分离,从而使Flash插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当Flash插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响Flash插件的正常运行,提高了插件的稳定性。本发明还提供了一种浏览器,包括上述实施例五至实施例八中所描述的任一活动对象创建装置。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式
的权利要求书由此明确地并入该具体实施方式
,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的活动对象创建装置和浏览器中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
权利要求
1.一种活动对象创建方法,包括: 在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行修改,阻止执行所述活动对象实现的功能; 根据用户发起的执行所述活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行再修改,继续执行所述活动对象实现的功倉泛。
2.根据权利要求1所述的方法,在所述浏览器创建活动对象之前还包括:截获浏览器的页面进程加载活动对象的操作,在浏览器的页面进程创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行; 所述浏览器创建活动对象的过程具体为:在独立于所述浏览器的页面进程的独立进程中创建所述活动对象; 所述继续执行所述活动对象实现的功能的步骤具体为:通过代理对象与独立进程通信调用活动对象,和/或,代理对象与独立进程通信被活动对象调用,执行所述活动对象实现的功能。
3.根据权利要求1或2所述的方法,所述定时消息为0x401消息。
4.根据权利要求1或2所述的方法,所述对活动对象的属性进行修改的步骤包括:获取所述活动对象的接口指针;根据接口指针查找记录所述活动对象的属性的函数,调用该函数对所述活动对象的属性进行修改。
5.根据权利要求1所述的方法,在所述继续执行所述活动对象实现的功能的步骤之前包括:拦截所述活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面,在所述浏览器的指定位置显示所述自定义界面。
6.根据权利要求2所述的方法,在所述继续执行所述活动对象实现的功能的步骤之前包括: 在所述独立进程中拦截活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面,通过代理对象与独立进程通信调用活动对象,在所述浏览器的指定位置显示所述自定义界面; 或者,在所述页面进程中拦截代理对象与独立进程通信调用活动对象的动作,调用自定义的绘制函数绘制自定义界面,在所述浏览器的指定位置显示所述自定义界面。
7.一种活动对象创建装置,包括: 阻止模块,适于在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行修改,阻止执行所述活动对象实现的功能; 执行模块,适于根据用户发起的执行所述活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行再修改,继续执行所述活动对象实现的功能。
8.根据权利要求7所述的装置,所述装置包括页面进程模块;所述阻止模块和执行模块是所述页面进程模块的子模块。
9.根据权利要求7所述的装置,所述装置包括页面进程模块和独立进程模块;所述阻止模块和执行模块是所述独立进程模块的子模块; 所述页面进程模块包括:第一创建模块,适于截获浏览器的页面进程加载活动对象的操作,在浏览器的页面进程创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行; 所述独立进程模块还包括:第二创建模块,适于在独立于所述页面进程的独立进程中创建所述活动对象; 所述装置还包括分别在所述页面进程模块和所述独立进程模块中创建的通信窗口,所述执行模块进一步适于通过代理对象经由所述通信窗口与独立进程通信调用活动对象,和/或,代理对象经由所述通信窗口与独立进程通信被活动对象调用,继续执行所述活动对象实现的功能。
10.根据权利要求7至9任一项所述的装置,所述定时消息为0x401消息。
11.根据权利要求7至9任一项所述的装置,所述阻止模块具体适于获取所述活动对象的接口指针;根据接口指针查找记录所述活动对象的属性的函数,调用该函数对所述活动对象的属性进行修改,阻止执行所述活动对象实现的功能。
12.根据权利要求8所述的装置,还包括:绘制模块,适于拦截所述活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面,在所述浏览器的指定位置显示所述自定义界面。
13.根据权利要求9所述的装置, 所述独立进程模块还包括:绘制模块,适于在所述独立进程中拦截活动对象的绘制函数,调用自定义的绘制函数绘制自定义界面; 所述页面进程模块还包括:显示模块,适于通过代理对象与独立进程通信调用活动对象,在所述浏览器的指定位置显示所述自定义界面。
14.根据权利要求9所 述的装置,所述页面进程模块还包括: 绘制模块,适于在所述页面进程中拦截代理对象与独立进程通信调用活动对象的动作,调用自定义的绘制函数绘制自定义界面,在所述浏览器的指定位置显示所述自定义界面。
15.一种包括权利要求7至14任一项所述的活动对象创建装置的浏览器。
全文摘要
本发明公开了一种活动对象创建方法、装置及浏览器。其中根据本发明的一个方面提供的活动对象创建装置包括阻止模块,适于在浏览器创建活动对象之后,通过拦截线程消息循环中的定时消息或者通过对活动对象的属性进行修改,阻止执行活动对象实现的功能;执行模块,适于根据用户发起的执行所述活动对象实现的功能的请求,通过取消拦截线程消息循环中的定时消息或者通过对所述活动对象的属性进行再修改,继续执行所述活动对象实现的功能。采用本发明的技术方案,避免了不必要的插件播放造成用户资源的浪费,节省了电力、带宽和系统资源。同时,在用户有需要重新要求执行活动对象实现的功能时,无需刷新页面,实现了活动对象实现的功能的即点即执行。
文档编号G06F9/44GK103077016SQ20121057303
公开日2013年5月1日 申请日期2012年12月25日 优先权日2012年12月25日
发明者李锦伟, 贺跃松, 陈志 , 付俣, 任寰 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1