一种脚本执行方法、系统及浏览器的制作方法

文档序号:6385466阅读:134来源:国知局
专利名称:一种脚本执行方法、系统及浏览器的制作方法
技术领域
本发明涉及计算机网络技术领域,具体涉及一种脚本执行方法、系统及浏览器。
背景技术
IPC (Inter-Process Communication,进程间通信)是指至少两个进程或线程间传 送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位。每个进程都有 自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行 协调工作,才有了进程间通信。不同的进程可以运行在同一计算机上或通过网络连接的不 同计算机上。
一般来说,在以下情况下需要实现进程间通信
(I)数据传输一个进程需要将它的数据发送给另一个进程,发送的数据量在一个 字节到几兆字节之间。
(2)共享数据多个进程想要操作共享数据,一个进程对共享数据的修改,别的进 程应该立刻看到。
(3)通知事件一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了 某种事件(如进程终止时要通知父进程)。
(4)资源共享多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁 和同步机制。
(5)进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控 制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。
但是,现有技术还未提供关于进程间脚本执行的方案,利用现有的方法还不能实 现进程间脚本的交互执行。发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上 述问题的脚本执行系统、浏览器和相应的脚本执行方法。
根据本发明的一个方面,提供了一种脚本执行方法,该方法适用于由运行于独立 进程中的活动对象执行运行于页面进程中代理对象的脚本,所述代理对象和活动对象通过 预先建立的通信窗口进行通信,所述方法包括所述代理对象通过通信窗口将脚本发送给 所述活动对象;所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行 方法的调度标识;所述代理对象拦截页面进程中执行所述脚本中待执行方法的指令,将所 述指令发送给所述活动对象;所述活动对象通过执行所述指令,执行所述脚本中待执行方 法,而后将执行结果返回给代理对象。
根据本发明的另一方面,提供了一种脚本执行系统,所述系统包括运行于页面进 程中的代理对象、运行于独立进程中的活动对象以及分别在所述代理对象和活动对象上创 建的一对通信窗口 ;该系统适用于由活动对象执行页面进程中的脚本,所述活动对象和代理对象通过所述一对通信窗口进行通信;所述代理对象包括发送模块,适于通过通信窗 口将脚本发送给所述活动对象;调度标识获取模块,适于通过调用所述活动对象的调度接 口,获取所述脚本中待执行方法的调度标识;拦截模块,适于拦截页面进程中执行所述脚本 中待执行方法的指令,将所述指令发送给所述活动对象;所述活动对象包括接收模块,适 于接收所述代理对象中的发送模块发送的脚本以及拦截模块发送的指令;执行模块,适于 通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
根据本发明的再一个方面,提供了一种浏览器,包括上述脚本执行系统。
根据本发明的一个方面提供的方案,在代理对象将脚本发送给活动对象之后,代 理对象调用活动对象的调度接口获取脚本中待执行方法的调度标识;在代理对象将调度标 识反馈给页面后,代理对象拦截页面进程执行脚本中待执行方法的指令,将指令发送给活 动对象,由活动对象执行该指令,并将执行指令后获得的执行结果返回给代理对象,由此实 现了不同进程之间脚本的执行,并且实现了运行于页面进程中的页面对运行于独立进程中 的活动对象的控制。
根据本发明的一个方面提供的方案,在活动对象将脚本发送给代理对象之后,代 理对象查询页面进程中与脚本执行有关的接口,根据该接口获取脚本执行的方法,进而根 据脚本执行的方法执行活动对象发送过来的脚本,由此实现了不同进程之间脚本的执行, 并且实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的具体实施方式



通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中
图1示出了本发明中Flash插件代理对象和Flash插件活动对象的创建过程的示 意图2示出了根据本发明一个实施例的脚本执行方法的流程图3示出了根据本发明另一个实施例的脚本执行方法的流程图4示出了根据本发明一个实施例的脚本执行系统的结构框图5示出了根据本发明另一个实施例的脚本执行系统的结构框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例 所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。
本发明提供的脚本执行方法是指页面进程与独立进程之间的脚本执行方法。其中 页面进程运行Web页面的进程,独立进程是独立于页面进程的另一进程。在页面有ActiveX插件的情况下,页面进程运行ActiveX插件代理对象,独立进程运行ActiveX插件活动对 象,该ActiveX插件活动对象是真正的ActiveX插件的对象。在以下实施例中,以ActiveX 插件为Flash插件为例进行说明,但本发明不仅限于此。
在介绍页面进程和独立进程之间的脚本执行方法之前,首先介绍Flash插件代理 对象和Flash插件活动对象的创建过程。图1示出了本发明中Flash插件代理对象和Flash 插件活动对象的创建过程的示意图。如图1所示,页面进程中运行有Web页面和Flash插 件代理对象,独立进程中运行有空页面和Flash插件活动对象。
其中,运行于页面进程中的Flash代理对象是通过拦截浏览器的页面进程创建 Flash活动对象的过程,替换实际要创建的Flash活动对象而创建的。具体来说,在页面 中有Flash的情况下,当浏览器创建Flash插件时,会根据Flash插件CLSID (类标识,可 通过CLSIDFromProID获得)或ProgID (组件的字符串标识符)查询注册表,查看系统是否 已安装该Flash插件,若安装则继续创建过程。在页面进程继续创建Flash插件时,拦截 CoGetClassObject,创建Flash插件代理对象,该Flash插件代理对象包括一系列接口,包 括IUnknown指针将会调用的很多标准接口,例如IOleObject、IViewObject等。然后在调 用IClassFactory的CreateInstance时,将所创建的Flash插件代理对象返回给页面进程 的IUnknown指针。由此Flash插件代理对象创建完成。
运行于独立进程中的Flash插件活动对象是在页面进程激活Flash插件代理对 象时,在独立于页面进程的独立进程中创建的。具体来说,在页面进程激活Flash插件代 理对象时,提取出该Flash插件的属性、URL、大小等相关信息,然后创建一个独立进程。首 先,创建一个文件(document),即空页面,在其中插入一个对象(object),该独立进程调用 CoGetClassObject,拦截该 CoGetClassObject,创建一个 Flash 插件活动对象。该 Flash 插件活动对象包括一系列的接口,包括IUnknown指针将会调用的很多标准接口,例如 IOleObject、IViewObject 等。然后在调用 IClassFactory 的 CreateInstance 时,将所创 建的Flash插件活动对象返回给独立进程的IUnknown指针。由此Flash插件活动对象创 建完成。
接着,在Flash插件代理对象和Flash插件活动对象中分别创建与插件对象关联 的通信窗口,用于使Flash插件代理对象和Flash插件活动对象进行通信。通过这两个通 信窗口,两个对象可以针对Flash的大小、焦点、刷新、脚本以及其它信息进行交互。
进一步的,如果Web页面中有嵌套结构,即页面进程运行有多个父页面和多个子 页面。每当页面进程创建一个子页面及其代理对象时,将子页面的代理对象ID (也可包括 其URL)和该子页面的父页面的代理对象ID (也可包括其URL)发送给独立进程,在独立进 程中按照对应的层次结构创建活动对象。在这种情况下,运行于页面进程中的代理对象为 多个,运行于独立进程中的活动对象为多个,代理对象和活动对象一一对应,每个代理对象 的通信窗口和与该代理对象对应的活动对象的通信窗口具有对应的属性,通过这两个通信 窗口实现活动对象和与其对应的代理对象的通信。
图2示出了根据本发明一个实施例的脚本执行方法200的流程图。该方法适用于 由运行于页面进程中的Flash插件代理对象执行运行于独立进程中的Flash插件活动对 象的脚本,即该方法是运行于独立进程中的Flash插件活动对象控制页面进程中页面的方 法。如图2所示,方法200始于步骤S201,其中Flash插件活动对象通过通信窗口将脚本发送给Flash插件代理对象。以用户点击Flash上创建的按钮,触发页面变黑为例,当用户点 击Flash上的按钮时,Flash插件活动对象获取按钮点击操作对应的脚本,将该脚本通过通 信窗口发送给Flash插件代理对象。
随后,方法200进入步骤S202,其中Flash插件代理对象查询页面进程中与脚本执 行有关的接口,根据该接口获取脚本执行方法。在Flash插件代理对象接收到上述按钮点 击操作对应的脚本之后,查询和获取页面进程中的IHTMLWindow接口,IHTMLffindow接口为 与脚本执行有关的接口,该IHTMLWindow接口中的ExecScript为用于执行脚本的函数,即 ExecScript函数提供脚本执行方法。
随后,方法200进入步骤S203,其中Flash插件代理对象根据脚本执行方法执行该 脚本。Flash插件代理对象根据ExecScript函数提供的脚本执行方法执行上述按钮点击操 作对应的脚本,使页面变黑。
根据本实施例提供的脚本执行方法,在活动对象将脚本发送给代理对象之后,代 理对象查询页面进程中与脚本执行有关的接口,根据该接口获取脚本执行的方法,进而根 据脚本执行的方法执行活动对象发送过来的脚本,由此实现了不同进程之间脚本的执行, 并且实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制。进一步的, 在本方法中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的 ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了 浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产 生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运 行,提闻了插件的稳定性。
图3示出了根据本发明另一个实施例的脚本执行方法300的流程图。该方法适用 于由运行于独立进程中的Flash插件活动对象执行运行于页面进程中的Flash插件代理对 象的脚本,即该方法是运行于页面进程中的页面控制独立进程中Flash插件活动对象的方 法。如果页面想要获取Flash的信息(如版本号、路径、URL等属性)或者页面想要操作Flash (如页面想要改变Flash窗口的大小),都可以通过该方法来实现。
如图3所示,方法300始于步骤S301,Flash插件代理对象通过通信窗口将脚本发 送给Flash插件活动对象。以获取Flash版本号为例,由于页面进程中的Flash插件代理 对象并不是真正的Flash插件,它并不知道Flash版本号,因而Flash插件代理对象不能直 接向页面反馈Flash版本号。在独立进程创建完成Flash插件活动对象之后,会向页面通 知Flash插件活动对象的变量,页面开发者根据该变量在页面中写入获取Flash版本号的 脚本,该脚本中待执行的方法就是获取Flash版本号。Flash插件代理对象通过通信窗口将 获取Flash版本号的脚本发送给Flash插件活动对象。
随后,方法300进入步骤S302,其中Flash插件代理对象通过调用Flash插件活动 对象的调度接口,让Flash插件活动对象执行获取脚本中待执行方法的调度标识的方法, 在Flash插件活动对象获取该调度标识后通过通信窗口将调度标识返回给Flash插件代理 对象。具体来说,首先页面解析脚本,将该脚本中待执行的方法的名称调到Flash插件代理 对象的IDispatch接口中,IDispatch接口为调度接口,用于调用不支持虚函数表的语言程 序中的函数,IDispatch接口具有GetIDsOfNames函数和Invoke函数,其中GetIDsOfNames 函数提供的是利用方法的名称返回其调度ID的方法,Invoke函数提供的是利用方法的调度ID执行方法的指令。由于Flash插件代理对象无法获知脚本中待执行方法的调度标识 (ID),所以Flash插件代理对象通过通信窗口调用Flash插件活动对象的IDispatch接口。 而Flash插件活动对象是真正的Flash插件的对象,所以通过调用Flash插件活动对象的 GetIDsOfNames函数提供的方法,可以让Flash插件活动对象获取待执行的方法的调度ID, 然后Flash插件活动对象通过通信窗口将该调度ID返回给Flash插件代理对象。
随后,方法300进入步骤S303,其中Flash插件代理对象拦截页面进程中执行脚 本中待执行方法的指令,将该指令发送给Flash插件活动对象。具体来说,在Flash插件代 理对象获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程 下一步就会执行Invoke(ID)的指令,本方法在这里拦截页面进程的Invoke (ID)的指令,将 Invoke (ID)的指令发送给Flash插件活动对象。
随后,方法300进入步骤S304,其中Flash插件活动对象通过执行指令,执行脚本 中待执行方法,而后将执行结果返回给Flash插件代理对象。具体来说,Flash插件活动对 象执行Invoke (ID)的指令,从而执行脚本中待执行的方法,获取Flash版本号,并将Flash 版本号返回给Flash插件代理对象,然后Flash插件代理对象会将Flash版本号反馈给页面。
根据本实施例提供的脚本执行方法,在代理对象将脚本发送给活动对象之后,代 理对象调用活动对象的调度接口获取脚本中待执行方法的调度ID ;在代理对象将调度ID 反馈给页面后,代理对象拦截页面进程执行脚本中待执行方法的指令,将指令发送给活动 对象,由活动对象执行该指令,并将执行指令后获得的执行结果返回给代理对象,由此实现 了不同进程之间脚本的执行,并且实现了运行于页面进程中的页面对运行于独立进程中的 活动对象的控制。进一步的,在本方法中,通过在页面进程中运行代理对象,而在独立进程 中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题 时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性 问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不 会影响ActiveX插件的正常运行,提高了插件的稳定性。
图4示出了根据本发明一个实施例的脚本执行系统的结构框图。如图4所示,该系 统包括运行于页面进程中的代理对象410、运行于独立进程中的活动对象420以及分别在 代理对象410和活动对象420中创建的一对通信窗口 430。该系统适用于由代理对象410 执行活动对象420的脚本,代理对象410和活动对象420通过一对通信窗口 430进行通信。
活动对象420包括发送模块421,适于通过通信窗口 430将脚本发送给代理对象 410。以用户点击Flash上创建的按钮,触发页面变黑为例,当用户点击Flash上的按钮时, 活动对象420获取按钮点击操作对应的脚本,由发送模块421将该脚本通过通信窗口 430 发送给代理对象410。
代理对象410包括查询模块411和执行模块412。查询模块411适于查询页面 进程中与脚本执行有关的接口,根据该接口获取脚本执行方法;执行模块412适于根据脚 本执行方法执行脚本。在代理对象410接收到上述按钮点击操作对应的脚本之后,查询模 块411查询和获取页面进程中的IHTMLWindow接口,IHTMLWindow接口为与脚本执行有关 的接口,该IHTMLWindow接口中的ExecScript为用于执行脚本的函数,即ExecScript函数 提供脚本执行方法。执行模块412根据ExecScript函数提供的脚本执行方法执行上述按钮点击操作对应的脚本,使页面变黑。
上述运行于页面进程中的代理对象410是通过拦截浏览器的页面进程创建活动对象的过程,替换实际要创建的活动对象而创建的;运行于独立进程中的活动对象420是在页面进程激活代理对象410时,在独立于页面进程的独立进程中创建的;在活动对象420 和代理对象410中分别创建的一对通信窗口 430用于使活动对象420和代理对象410进行通信。
进一步的,运行于页面进程中的代理对象为多个,运行于独立进程中的活动对象为多个,代理对象和活动对象--对应,代理对象的通信窗口和与代理对象对应的活动对象的通信窗口具有对应的属性,通过该一对通信窗口实现活动对象和代理对象的通信。
根据本实施例提供的脚本执行系统,在活动对象将脚本发送给代理对象之后,代理对象查询页面进程中与脚本执行有关的接口,根据该接口获取脚本执行的方法,进而根据脚本执行的方法执行活动对象发送过来的脚本,由此实现了不同进程之间脚本的执行, 并且实现了运行于独立进程中的活动对象对运行于页面进程中的页面的控制。进一步的, 在本系统中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的 ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提闻了插件的稳定性。图5示出了根据本发明另一个实施例的脚本执行系统的结构框图。如图5所示, 该系统包括运行于页面进程中的代理对象510、运行于独立进程中的活动对象520以及分别在代理对象510和活动对象520中创建的一对通信窗口 530。该系统适用于由活动对象 520执行页面进程中的脚本,代理对象510和活动对象520通过一对通信窗口 530进行通 目。
代理对象510包括发送模块511、调度标识获取模块512以及拦截模块513。
发送模块511适于通过通信窗口将脚本发送给活动对象520 ;在独立进程创建完成活动对象520之后,会向页面通知活动对象520的变量,页面开发者根据该变量在页面中写入脚本,发送模块511通过通信窗口 530将脚本发送给活动对象520。
调度标识获取模块512适于通过调用活动对象520的调度接口,获取脚本中待执行方法的调度标识。进一步的,调度标识获取模块512包括调用模块514和调度标识接收模块515,调用模块514适于调用活动对象520的调度接口,让活动对象520执行获取脚本中待执行方法的调度标识的方法获取调度标识;调度标识接收模块515适于接收活动对象520通过通信窗口 530返回的调度标识。具体来说,首先页面解析脚本,将该脚本中待执行的方法的名称调到代理对象510的IDispatch接口中,IDispatch接口为调度接口, 用于调用不支持虚函数表的语言程序中的函数,IDispatch接口具有GetIDsOfNames函数和Invoke函数,其中GetIDsOfNames函数提供的是利用方法的名称返回其调度ID的方法,Invoke函数提供的是利用方法的调度ID执行方法的指令。由于代理对象510无法获知脚本中待执行方法的调度ID,所以调用模块514通过通信窗口 530调用活动对象520 的IDispatch接口。而活动对象520是真正的插件的对象,所以通过调用活动对象520的 GetIDsOfNames函数提供的方法,可以让活动对象520获取待执行的方法的调度ID,然后活动对象520通过通信窗口 530将该调度ID返回给调度标识接收模块515。
拦截模块513适于拦截页面进程中执行脚本中待执行方法的指令,将指令发送给活动对象520。在代理对象510获得待执行的方法的调度ID之后,将该调度ID反馈给页面,按照常规流程页面进程下一步就会执行Invoke (ID)的指令,在这里拦截模块513拦截页面进程的Invoke (ID)的指令,将Invoke (ID)的指令发送给活动对象520。
活动对象520包括接收模块521和执行模块522。接收模块521适于接收代理对象510中的发送模块511发送的脚本以及拦截模块513发送的指令;执行模块522适于通过执行指令,执行脚本中待执行方法,而后将执行结果返回给代理对象510。执行模块522执行Invoke(ID)的指令,从而执行脚本中待执行的方法,并将执行结果返回给代理对象510, 然后代理对象510会将执行结果反馈给页面。
上述运行于页面进程中的代理对象510是通过拦截浏览器的页面进程创建活动对象的过程,替换实际要创建的活动对象而创建的;运行于独立进程中的活动对象520是在页面进程激活代理对象510时,在独立于页面进程的独立进程中创建的;在活动对象520 和代理对象510中分别创建的一对通信窗口 530用于使活动对象520和代理对象510进行通信。
进一步的,运行于页面进程中的代理对象为多个,运行于独立进程中的活动对象为多个,代理对象和活动对象--对应,代理对象的通信窗口和与代理对象对应的活动对象的通信窗口具有对应的属性,通过该一对通信窗口实现活动对象和代理对象的通信。
根据本实施例提供的脚本执行系统,在代理对象将脚本发送给活动对象之后,代理对象调用活动对象的调度接口获取脚本中待执行方法的调度ID ;在代理对象将调度ID 反馈给页面后,代理对象拦截页面进程执行脚本中待执行方法的指令,将指令发送给活动对象,由活动对象执行该指令,并将执行指令后获得的执行结果返回给代理对象,由此实现了不同进程之间脚本的执行,并且实现了运行于页面进程中的页面对运行于独立进程中的活动对象的控制。进一步的,在本系统中,通过在页面进程中运行代理对象,而在独立进程中运行活动对象,使得真正的ActiveX插件与页面进程分离,从而使ActiveX插件出现问题时不会影响页面进程,提高了浏览器的稳定性,尤其是当ActiveX插件出现病毒等安全性问题时,也不会对页面进程产生影响,提高了浏览器的安全性;同时,页面进程出现问题不会影响ActiveX插件的正常运行,提高了插件的稳定性。
本发明还提供了一种浏览器,该浏览器可以包括上述实施例所描述的任一脚本执行系统。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。 各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中, 并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施 例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保 护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面 的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此, 遵循具体实施方式
的权利要求书由此明确地并入该具体实施方式
,其中每个权利要求本身 都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地 改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单 元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或 子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任 何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的 任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的 权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来 代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例 中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的 范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任 意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行 的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使 用微处理器或者数字信号处理器(DSP )来实现根据本发明实施例的脚本执行系统及浏览器 中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的 方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样 的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形 式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形 式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领 域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中, 不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在 未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这 样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来 实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件 项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为 名称。
权利要求
1.一种脚本执行方法,该方法适用于由运行于独立进程中的活动对象执行运行于页面进程中代理对象的脚本,所述代理对象和活动对象通过预先建立的通信窗口进行通信,所述方法包括 所述代理对象通过通信窗口将脚本发送给所述活动对象; 所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识; 所述代理对象拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象; 所述活动对象通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
2.根据权利要求1所述的方法,所述代理对象通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识的步骤包括 所述代理对象通过调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法,而后所述活动对象通过通信窗口将所述调度标识返回给所述代理对象。
3.根据权利要求1或2所述的方法,所述运行于页面进程中的代理对象是通过拦截浏览器的页面进程创建活动对象的过程,替换实际要创建的活动对象而创建的; 所述运行于独立进程中的活动对象是在页面进程激活所述代理对象时,在独立于浏览器页面进程的独立进程中创建的; 在所述活动对象和代理对象中分别创建的所述通信窗口用于使活动对象和代理对象进行通信。
4.根据权利要求3所述的方法,运行于所述页面进程中的代理对象为多个,运行于所述独立进程中的活动对象为多个,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该两个通信窗口实现活动对象和代理对象的通信。
5.一种脚本执行系统,所述系统包括运行于页面进程中的代理对象、运行于独立进程中的活动对象以及分别在所述代理对象和活动对象上创建的一对通信窗口 ;该系统适用于由活动对象执行页面进程中的脚本,所述活动对象和代理对象通过所述一对通信窗口进行通信; 所述代理对象包括 发送模块,适于通过通信窗口将脚本发送给所述活动对象; 调度标识获取模块,适于通过调用所述活动对象的调度接口,获取所述脚本中待执行方法的调度标识; 拦截模块,适于拦截页面进程中执行所述脚本中待执行方法的指令,将所述指令发送给所述活动对象; 所述活动对象包括 接收模块,适于接收所述代理对象中的发送模块发送的脚本以及拦截模块发送的指令; 执行模块,适于通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。
6.根据权利要求5所述的系统,所述调度标识获取模块包括 调用模块,适于调用所述活动对象的调度接口,让所述活动对象执行获取所述脚本中待执行方法的调度标识的方法获取所述调度标识; 调度标识接收模块,适于接收所述活动对象通过通信窗口返回的所述调度标识。
7.根据权利要求5或6所述的系统,所述运行于页面进程中的代理对象是通过拦截浏览器的页面进程创建活动对象的过程,替换实际要创建的活动对象而创建的; 所述运行于独立进程中的活动对象是在页面进程激活所述代理对象时,在独立于浏览器页面进程的独立进程中创建的; 在所述活动对象和代理对象中分别创建的所述一对通信窗口用于使活动对象和代理对象进行通信。
8.根据权利要求7所述的系统,运行于所述页面进程中的代理对象为多个,运行于所述独立进程中的活动对象为多个,所述代理对象和活动对象一一对应,所述代理对象的通信窗口和与所述代理对象对应的活动对象的通信窗口具有对应的属性,通过该一对通信窗口实现活动对象和代理对象的通信。
9.一种包括权利要求5至8任一项所述的脚本执行系统的浏览器。
全文摘要
本发明公开了一种脚本执行方法、系统及浏览器。其中系统包括运行于页面进程中的代理对象、运行于独立进程中的活动对象以及分别在所述代理对象和活动对象上创建的一对通信窗口;该系统适用于由活动对象执行页面进程中的脚本,所述活动对象和代理对象通过所述一对通信窗口进行通信;所述代理对象包括发送模块;调度标识获取模块;拦截模块;所述活动对象包括接收模块,适于接收所述代理对象中的发送模块发送的脚本以及拦截模块发送的指令;执行模块,适于通过执行所述指令,执行所述脚本中待执行方法,而后将执行结果返回给代理对象。本发明实现了不同进程之间脚本的执行。
文档编号G06F9/44GK103034503SQ20121057297
公开日2013年4月10日 申请日期2012年12月25日 优先权日2012年12月25日
发明者李锦伟, 贺跃松, 陈志 , 付俣, 任寰 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1