发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种浏览器控件的中断恢复方法及系统。
依据本发明的一个方面,提供了一种浏览器控件的中断恢复方法,其包括步骤:
截获浏览器的页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
可选地,所述代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象的步骤,具体包括:
代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃;
如果活动对象卡死,则代理对象停止与所述活动对象的通信并向独立进程发送激活信息,在独立进程中重新创建活动对象,
如果独立进程崩溃,则创建新的独立进程,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
可选地,所述代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃的步骤,具体包括:
代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃。
可选地,所述代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃的步骤中,
如果根据所述运行状态信息发现以下至少一项:活动对象所在线程的消息循环不活动,活动对象的窗口挂起,活动对象线程的一直忙,则判定活动对象卡死;
如果根据所述运行状态信息发现以下至少一项:独立进程中的主窗口不存在,活动对象中的窗口不存在,则判定独立进程崩溃。
可选地,所述方法还包括步骤:
代理对象定期询问活动对象的运行信息,并保存所述运行信息;
所述代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象,进一步为:
代理对象向独立进程发送所述激活信息和所述运行信息;
根据所述激活信息,在独立进程中重新创建活动对象;
根据所述运行信息,获取原活动对象的中断位置,令新创建的活动对象在所述中断位置处继续运行。
可选地,所述代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象,进一步包括:
所述代理对象通过与独立进程通信判断活动对象是否中断,如果是,提示用户活动对象中断;
接收用户的重激活指令;
代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
可选地,所述在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行,之后还包括步骤:
代理对象通过与独立进程通信,调用活动对象,和/或,
代理对象通过与独立进程通信,被活动对象调用。
可选地,页面进程为每个页面创建一个页面线程,截获页面线程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面线程中运行;
独立进程为每个页面创建一个独立于页面线程的对象线程,在所述对象线程中创建所述实际要创建的活动对象,所述活动对象在对象线程中运行;
代理对象通过与对象线程通信判断活动对象是否中断,如果是,代理对象向对象线程发送激活信息,在对象线程中重新创建活动对象。
可选地,所述方法还包括:
当活动对象出现问题时,对运行所述活动对象的对象线程执行挂起、降低权限或终止操作。
可选地,所述方法还包括:
独立进程创建活动对象时,代理对象将页面进程或页面线程的通信句柄和代理对象标识作为通信标识,传送给独立进程或对象线程;
独立进程创建活动对象后,活动对象将独立进程或对象线程的通信句柄和活动对象标识作为通信标识,传送给代理对象。
可选地,所述独立进程为每个页面创建一个独立于页面线程的对象线程,包括:
独立进程创建主线程,主线程为每个页面创建一个独立于页面线程的对象线程,所述主线程用于维护全局配置。
可选地,所述活动对象包括ActiveX对象。
根据本发明的另一方面,提供了一种浏览器控件的中断恢复系统,其包括:
页面进程模块,适于截获浏览器的页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
独立进程模块,适于在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
恢复模块,适于令代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
可选地,所述恢复模块包括:
判断子模块,适于令代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃;
卡死子模块,适于在活动对象卡死时,令代理对象停止与所述活动对象的通信并向独立进程发送激活信息,在独立进程中重新创建活动对象;
崩溃子模块,适于在独立进程崩溃时,创建新的独立进程,令代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
可选地,所述判断子模块,适于令代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃。
可选地,所述判断子模块中,
如果根据所述运行状态信息发现以下至少一项:活动对象所在线程的消息循环不活动,活动对象的窗口挂起,活动对象线程的一直忙,则判定活动对象卡死;
如果根据所述运行状态信息发现以下至少一项:独立进程中的主窗口不存在,活动对象中的窗口不存在,则判定独立进程崩溃。
可选地,所述恢复模块还适于令代理对象定期询问活动对象的运行信息,并保存所述运行信息;以及,
还适于在活动对象中断时,令代理对象向独立进程发送所述激活信息和所述运行信息,根据所述激活信息在独立进程中重新创建活动对象,并且,根据所述运行信息,获取原活动对象的中断位置,令新创建的活动对象在所述中断位置处继续运行。
可选地,所述系统还包括:
交互模块,适于在活动对象中断的情况下,提示用户活动对象中断,以及接收用户的重激活指令,并将所述重激活指令发送给所述恢复模块。
可选地,所述系统还包括:
调用模块,适于令代理对象通过与独立进程通信,调用活动对象,和/或,代理对象通过与独立进程通信,被活动对象调用。
可选地,所述页面进程模块,还适于令页面进程为每个页面创建一个页面线程,截获页面线程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面线程中运行;
所述独立进程模块,还适于令独立进程为每个页面创建一个独立于页面线程的对象线程,在所述对象线程中创建所述实际要创建的活动对象,所述活动对象在对象线程中运行;
所述恢复模块,还适于令代理对象通过与对象线程通信判断活动对象是否中断,如果是,代理对象向对象线程发送激活信息,在对象线程中重新创建活动对象。
可选地,所述系统还包括:
错误处理模块,适于当活动对象出现问题时,对运行所述活动对象的对象线程执行挂起、降低权限或终止操作。
可选地,所述系统还包括:
代理对象通信标识传送模块,适于令独立进程模块创建活动对象时,代理对象将页面进程或页面线程的通信句柄和代理对象标识作为通信标识,传送给独立进程或对象线程;
活动对象通信标识传送模块,适于令独立进程模块创建活动对象后,活动对象将独立进程或对象线程的通信句柄和活动对象标识作为通信标识,传送给代理对象。
可选地,所述页面进程模块,还适于令独立进程创建主线程,主线程为每个页面创建一个对象线程,所述主线程用于维护全局配置。
本发明所述浏览器控件的中断恢复方法及系统,在页面进程中创建代理对象,在独立进程中创建活动对象,借助代理对象与独立进程和/或其活动对象之间的通信,及时发现活动对象的中断,并在发现活动对象中断后重新创建活动对象,从而缩短了活动对象中断后的恢复时间,提高了用户的使用效率。另外,通过保存活动对象的运行信息,可以令重新创建的活动对象在原活动对象的中断位置处开始运行,进一步提高了用户的使用效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的所述浏览器控件的中断恢复方法流程图,如图1所示,所述方法包括步骤:
S100:截获浏览器的页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行。
其中,所述的活动对象就是真实的浏览器控件,例如真实的ActiveX对象,即ActiveX控件;所述的代理对象可以是模拟的浏览器控件,例如模拟的ActiveX控件,所述代理对象在页面进程中运行。
具体举例说明本发明如下:
在网页中有ActiveX控件的情况下,在浏览器创建ActiveX控件时,会根据控件CLSID或者ProgID查询注册表,其中可以通过CLSIDFromProgID获取CLSID,由此查看系统是否已安装相应控件,若安装则会继续创建过程。浏览器通过调用CoGetClassObject得到相应控件的IUnknown指针,然后通过标准接口进行相互操作。CoGetClassObject执行过程为,通过CLSID去注册表查询ActiveX路径,获得ActiveX路径后,调用LoadLibrary加载ActiveX控件,调用其导出函数DllGetClassObject获得类厂指针(IClassFactory),然后调用IClassFactory的CreateInstance方法得到ActiveX控件对应的IUnknown指针。
在加载ActiveX控件时,拦截CoGetClassObject,创建一个ActiveX控件代理对象,该ActiveX控件代理对象包括一系列接口,例如IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的ActiveX控件代理对象返回给ActiveX控件的IUnknown指针。
S200:在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行。
仍具体举例说明本发明如下:在页面激活所述ActiveX控件时,提取出该控件的属性、URL、大小等相关信息,然后创建一个独立进程。具体来说,创建一个文件(document),在其中插入一个对象,该独立进程调用CoGetClassObject,拦截该CoGetClassObject,再创建另一个ActiveX控件活动对象,该ActiveX控件活动对象包括一系列接口,例如IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调用IClassFactory的CreateInstance时,将所创建的该另一个ActiveX控件活动对象返回给独立进程的ActiveX控件的IUnknown指针。
S300:代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象,结束流程;否则,直接结束流程。
具体举例说明本发明如下:在所创建的两个ActiveX控件对象中分别创建一个与该控件对象关联的窗口以用来进行通信。具体来说两个控件对象可以针对大小、焦点、刷新、脚本以及其他信息进行交互。根据本发明的方法可以拦截以上两个进程中的所有请求,通过预先创建的两个ActiveX控件对象来实现这两个进程之间的信息交互。由此ActiveX控件的具体计算过程在独立进程中进行,因而不会影响原网页的进程。
所述步骤S300进一步包括:
S310:代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃。具体地,代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃。如果根据所述运行状态信息发现以下至少一项:活动对象所在线程的消息循环不活动,活动对象的窗口挂起,活动对象线程的一直忙,则判定活动对象卡死;如果根据所述运行状态信息发现以下至少一项:独立进程中的主窗口不存在,活动对象中的窗口不存在,则判定独立进程崩溃。
代理对象定期询问独立进程和/或其活动对象的运行状态信息,具体来说可以用很多方式实现这一监控动作,举例来说,可以在开启的独立进程中为每一个活动对象绑定一个消息窗口;令页面进程的代理对象定期地查询该消息窗口,以监控该活动对象是否正常运行。S320:如果活动对象卡死,则代理对象停止与所述活动对象的通信并向独立进程发送激活信息,在独立进程中重新创建活动对象。
S330:如果独立进程崩溃,则创建新的独立进程,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
通过上述方法步骤的执行,能够及时识别活动对象的中断,并在活动对象中断后对其及时重新激活,缩短响应时间。
另外,所述步骤S200之后还可以包括步骤:
P1:代理对象定期询问活动对象的运行信息,并保存所述运行信息。
相应地,所述步骤S300中,所述代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象,进一步为:
代理对象向独立进程发送所述激活信息和所述运行信息;
根据所述激活信息,在独立进程中重新创建活动对象;
根据所述运行信息,获取原活动对象的中断位置,令新创建的活动对象在所述中断位置处继续运行。
其中,所述激活信息主要是:活动对象的属性、URL、位置、大小等信息;所述运行信息是活动对象的运行进度信息。通过采用所述步骤P1,以及对所述步骤S300进行相应的改变,可以保证活动对象能够在中断位置处开始重新运行,相比现有技术中完全的重新启动,显然进一步提高了响应效率。
所述步骤S300中还可以由用户选择是否重新激活已经中断的活动对象以提高与用户的交互性能,具体地,其可以进一步包括:
所述代理对象通过与独立进程通信判断活动对象是否中断,如果是,提示用户活动对象中断;
接收用户的重激活指令;
代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
所述步骤S300之后还可以包括步骤:
S400:代理对象通过与独立进程通信,调用活动对象,和/或,代理对象通过与独立进程通信,被活动对象调用。
通常一个浏览器往往可以打开很多个页面来浏览不同的网页,参见图2,所述方法还可以应用于多页面的情况,此时可以多线程方式对应多个页面运行多个活动对象,具体地,所述方法步骤如下:
S100’:页面进程为每个页面创建一个页面线程,截获页面线程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面线程中运行.
S200’:独立进程为每个页面创建一个独立于页面线程的对象线程,在所述对象线程中创建所述实际要创建的活动对象,所述活动对象在对象线程中运行。该步骤中,独立进程创建主线程,主线程为每个页面创建一个独立于页面线程的对象线程,所述主线程用于维护全局配置。
并且,该步骤中,独立进程创建活动对象时,代理对象将页面进程或页面线程的通信句柄和代理对象标识作为通信标识,传送给独立进程或对象线程;独立进程创建活动对象后,活动对象将独立进程或对象线程的通信句柄和活动对象标识作为通信标识,传送给代理对象。
S300’:代理对象通过与对象线程通信判断活动对象是否中断,如果是,代理对象向对象线程发送激活信息,在对象线程中重新创建活动对象。
所述活动对象包括ActiveX对象,以ActiveX对象为例,则ActiveX对象在对象线程中运行,当ActiveX对象出现问题时,例如ActiveX对象陷入死循环时,可以对运行所述ActiveX对象的对象线程执行挂起操作,使得所述对象线程暂时不能运行;或者对运行所述ActiveX对象的对象线程执行降低权限操作;或者对运行所述ActiveX对象的对象线程执行终止操作,终止所述的对象线程。
在本申请所述的方法中,例如,针对IE浏览器中ActiveX控件的执行过程中,可以创建模拟的ActiveX类厂,取代真实的ActiveX类厂,在页面进程或页面线程模拟标准方式,创建代理对象,例如,参考如下的模型:
class CAxClassFactory:public IClassFactory
{
……
}
可以创建ActiveX代理类,用于完成真实ActiveX类的所有接口,并转发对ActiveX对象的初始化、传送数据、传送状态和执行回调等操作,例如,参考如下的模型:
ActiveX控件需要放在ActiveX容器中在浏览器的页面进程或页面线程中运行,因此代理对象要放入到真实容器中在页面进程或页面线程中运行,所述的真实容器就是真实的ActiveX容器,所以可以创建模拟容器即模拟的ActiveX容器,在独立进程或对象线程中实现页面环境,将ActiveX对象放入到真实容器中在独立进程或对象线程中运行,例如,参考如下的模型:
图3示出了根据本发明一个实施例的浏览器控件的中断恢复系统的模块结构示意图,如图3所示,所述系统包括:
页面进程模块100,适于截获浏览器的页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行。
独立进程模块200,适于在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行。
恢复模块300,适于令代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
其中,图4示出了根据本发明一个实施例的恢复模块的内部模块结构示意图,如图4所示,所述恢复模块300包括:
判断子模块310,适于令代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃。
其中,所述判断子模块310,适于令代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃。具体地,如果根据所述运行状态信息发现以下至少一项:活动对象所在线程的消息循环不活动,活动对象的窗口挂起,活动对象线程的一直忙,则判定活动对象卡死;如果根据所述运行状态信息发现以下至少一项:独立进程中的主窗口不存在,活动对象中的窗口不存在,则判定独立进程崩溃。
卡死子模块320,适于在活动对象卡死时,令代理对象停止与所述活动对象的通信并向独立进程发送激活信息,在独立进程中重新创建活动对象;
崩溃子模块330,适于在独立进程崩溃时,创建新的独立进程,令代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
另外,所述恢复模块300还适于令代理对象定期询问活动对象的运行信息,并保存所述运行信息;以及,
还适于在活动对象中断时,令代理对象向独立进程发送所述激活信息和所述运行信息,根据所述激活信息在独立进程中重新创建活动对象,并且,根据所述运行信息,获取原活动对象的中断位置,令新创建的活动对象在所述中断位置处继续运行。
图5示出了根据本发明另一个实施例的浏览器控件的中断恢复系统的模块结构示意图,如图5所示,本实施例所述系统与上一实施例所述系统基本相同,其不同之处在于,该系统还包括:
交互模块400,适于在活动对象中断的情况下,提示用户活动对象中断,以及接收用户的重激活指令,并将所述重激活指令发送给所述恢复模块。
调用模块500,适于令代理对象通过与独立进程通信,调用活动对象,和/或,代理对象通过与独立进程通信,被活动对象调用。
图6示出了根据本发明再一个实施例的浏览器控件的中断恢复系统的模块结构示意图,如图6所示,本实施例所述系统与上一实施例所述系统基本相同,其不同之处仅在于:
所述页面进程模块100,还适于令页面进程为每个页面创建一个页面线程,截获页面线程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面线程中运行。所述页面进程模块100,还适于令独立进程创建主线程,主线程为每个页面创建一个对象线程,所述主线程用于维护全局配置。
所述独立进程模块200,还适于令独立进程为每个页面创建一个独立于页面线程的对象线程,在所述对象线程中创建所述实际要创建的活动对象,所述活动对象在对象线程中运行。
所述恢复模块300,还适于令代理对象通过与对象线程通信判断活动对象是否中断,如果是,代理对象向对象线程发送激活信息,在对象线程中重新创建活动对象。
并且,所述系统还包括:
错误处理模块600,适于当活动对象出现问题时,对运行所述活动对象的对象线程执行挂起、降低权限或终止操作。
代理对象通信标识传送模块700,适于令独立进程模块创建活动对象时,代理对象将页面进程或页面线程的通信句柄和代理对象标识作为通信标识,传送给独立进程或对象线程。
活动对象通信标识传送模块800,适于令独立进程模块创建活动对象后,活动对象将独立进程或对象线程的通信句柄和活动对象标识作为通信标识,传送给代理对象。
本发明实施例所述浏览器控件的中断恢复方法及系统,在页面进程中创建代理对象,在独立进程中创建活动对象,借助代理对象与独立进程和/或其活动对象之间的通信,及时发现活动对象的中断,并在发现活动对象中断后重新创建活动对象,从而缩短了活动对象中断后的恢复时间,提高了用户的使用效率。另外,通过保存活动对象的运行信息,可以令重新创建的活动对象在原活动对象的中断位置处开始运行,进一步提高了用户的使用效率。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的浏览器控件的中断恢复系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明实施例还揭示了A1、一种浏览器控件的中断恢复方法,其包括步骤:
截获浏览器的页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
A2、如A1所述的方法,其特征在于,所述代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象的步骤,具体包括:
代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃;
如果活动对象卡死,则代理对象停止与所述活动对象的通信并向独立进程发送激活信息,在独立进程中重新创建活动对象,
如果独立进程崩溃,则创建新的独立进程,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
A3、如A2所述的方法,其特征在于,所述代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃的步骤,具体包括:
代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃。
A4、如A3所述的方法,其特征在于,所述代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃的步骤中,
如果根据所述运行状态信息发现以下至少一项:活动对象所在线程的消息循环不活动,活动对象的窗口挂起,活动对象线程的一直忙,则判定活动对象卡死;
如果根据所述运行状态信息发现以下至少一项:独立进程中的主窗口不存在,活动对象中的窗口不存在,则判定独立进程崩溃。
A5、如A1所述的方法,其特征在于,所述方法还包括步骤:
代理对象定期询问活动对象的运行信息,并保存所述运行信息;
所述代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象,进一步为:
代理对象向独立进程发送所述激活信息和所述运行信息;
根据所述激活信息,在独立进程中重新创建活动对象;
根据所述运行信息,获取原活动对象的中断位置,令新创建的活动对象在所述中断位置处继续运行。
A6、如A1所述的方法,其特征在于,所述代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象,进一步包括:
所述代理对象通过与独立进程通信判断活动对象是否中断,如果是,提示用户活动对象中断;
接收用户的重激活指令;
代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
A7、如A1所述的方法,其特征在于,所述在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行,之后还包括步骤:
代理对象通过与独立进程通信,调用活动对象,和/或,
代理对象通过与独立进程通信,被活动对象调用。
A8、如A1所述的方法,其特征在于,
页面进程为每个页面创建一个页面线程,截获页面线程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面线程中运行;
独立进程为每个页面创建一个独立于页面线程的对象线程,在所述对象线程中创建所述实际要创建的活动对象,所述活动对象在对象线程中运行;
代理对象通过与对象线程通信判断活动对象是否中断,如果是,代理对象向对象线程发送激活信息,在对象线程中重新创建活动对象。
A9、根据A8所述的方法,其特征在于,还包括:
当活动对象出现问题时,对运行所述活动对象的对象线程执行挂起、降低权限或终止操作。
A10、根据A8所述的方法,其特征在于,还包括:
独立进程创建活动对象时,代理对象将页面进程或页面线程的通信句柄和代理对象标识作为通信标识,传送给独立进程或对象线程;
独立进程创建活动对象后,活动对象将独立进程或对象线程的通信句柄和活动对象标识作为通信标识,传送给代理对象。
A11、根据A8所述的方法,其特征在于,所述独立进程为每个页面创建一个独立于页面线程的对象线程,包括:
独立进程创建主线程,主线程为每个页面创建一个独立于页面线程的对象线程,所述主线程用于维护全局配置。
A12、如A1所述的方法,其特征在于,所述活动对象包括ActiveX对象。
本发明实施例还揭示了B13、一种浏览器控件的中断恢复系统,其包括:
页面进程模块,适于截获浏览器的页面进程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面进程中运行;
独立进程模块,适于在独立于浏览器页面进程的独立进程中,创建所述实际要创建的活动对象,所述活动对象在独立进程中运行;
恢复模块,适于令代理对象通过与独立进程和/或其活动对象通信判断活动对象是否中断,如果是,代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
B14、如B13所述的系统,其特征在于,所述恢复模块包括:
判断子模块,适于令代理对象通过与独立进程和/或其活动对象通信判断活动对象是否卡死和/或独立进程是否崩溃;
卡死子模块,适于在活动对象卡死时,令代理对象停止与所述活动对象的通信并向独立进程发送激活信息,在独立进程中重新创建活动对象;
崩溃子模块,适于在独立进程崩溃时,创建新的独立进程,令代理对象向独立进程发送激活信息,在独立进程中重新创建活动对象。
B15、如B14所述的系统,其特征在于,所述判断子模块,适于令代理对象定期询问独立进程和/或其活动对象的运行状态信息,并根据所述运行状态信息判断活动对象是否卡死和/或独立进程是否崩溃。
B16、如B15所述的系统,其特征在于,所述判断子模块中,
如果根据所述运行状态信息发现以下至少一项:活动对象所在线程的消息循环不活动,活动对象的窗口挂起,活动对象线程的一直忙,则判定活动对象卡死;
如果根据所述运行状态信息发现以下至少一项:独立进程中的主窗口不存在,活动对象中的窗口不存在,则判定独立进程崩溃。
B17、如B13所述的系统,其特征在于,
所述恢复模块还适于令代理对象定期询问活动对象的运行信息,并保存所述运行信息;以及,
还适于在活动对象中断时,令代理对象向独立进程发送所述激活信息和所述运行信息,根据所述激活信息在独立进程中重新创建活动对象,并且,根据所述运行信息,获取原活动对象的中断位置,令新创建的活动对象在所述中断位置处继续运行。
B18、如B13所述的系统,其特征在于,所述系统还包括:
交互模块,适于在活动对象中断的情况下,提示用户活动对象中断,以及接收用户的重激活指令,并将所述重激活指令发送给所述恢复模块。
B19、如B13所述的系统,其特征在于,所述系统还包括:
调用模块,适于令代理对象通过与独立进程通信,调用活动对象,和/或,代理对象通过与独立进程通信,被活动对象调用。
B20、如B13所述的系统,其特征在于,
所述页面进程模块,还适于令页面进程为每个页面创建一个页面线程,截获页面线程创建活动对象的过程,创建代理对象替换实际要创建的活动对象,所述代理对象在页面线程中运行;
所述独立进程模块,还适于令独立进程为每个页面创建一个独立于页面线程的对象线程,在所述对象线程中创建所述实际要创建的活动对象,所述活动对象在对象线程中运行;
所述恢复模块,还适于令代理对象通过与对象线程通信判断活动对象是否中断,如果是,代理对象向对象线程发送激活信息,在对象线程中重新创建活动对象。
B21、如B20所述的系统,其特征在于,所述系统还包括:
错误处理模块,适于当活动对象出现问题时,对运行所述活动对象的对象线程执行挂起、降低权限或终止操作。
B22、如B20所述的系统,其特征在于,所述系统还包括:
代理对象通信标识传送模块,适于令独立进程模块创建活动对象时,代理对象将页面进程或页面线程的通信句柄和代理对象标识作为通信标识,传送给独立进程或对象线程;
活动对象通信标识传送模块,适于令独立进程模块创建活动对象后,活动对象将独立进程或对象线程的通信句柄和活动对象标识作为通信标识,传送给代理对象。
B23、如B20所述的系统,其特征在于,所述页面进程模块,还适于令独立进程创建主线程,主线程为每个页面创建一个对象线程,所述主线程用于维护全局配置。