无论目标ECMAScript对象是否为只读对象都代理目标ECMAScript对象的制作方法

文档序号:32122935发布日期:2022-11-09 07:22阅读:54来源:国知局
无论目标ECMAScript对象是否为只读对象都代理目标ECMAScript对象的制作方法
无论目标ecmascript对象是否为只读对象都代理目标ecmascript对象


背景技术:

1.代理服务器是一种计算装置,它充当客户端装置(例如,其上的浏览器)与网络服务器之间的中介,以拦截客户端装置发起的向网络服务器请求资源的请求。代理服务器通常在将请求的或修改的资源传递给客户端装置之前分析和/或修改资源。
2.资源的一个示例是网页。网页包括多个元素。可以包括在网页中的元素的一个示例是ecmascript对象。ecmascript对象是符合ecmascript标准的对象,该标准是由ecma国际在ecma-262和iso/iec 16262中开发和维护的脚本语言规范。ecmascript的示例实现包括但不限于和
3.尽管ecmascript第六版(又名es6)引入了代理对象作为修改对ecmascript对象执行的操作的一种方式,但es6和ecmascript的后续版本对代理对象的使用施加了限制,以维护安全性和浏览器性能。例如,不可配置的ecmascript对象的属性(即,configurable=false(可配置=假))不能通过代理包装ecmascript对象被更改。在另一个示例中,本机浏览器方法(又名函数),例如document.addeventlistener,不能接受代理对象作为参数或“this(这个)”上下文。因此,代理对象传统上对于钩子(hooking)浏览器操作没有用处。


技术实现要素:

4.这里描述了各种方法,其中包括无论目标ecmascript对象是否是只读对象都代理目标ecmascript对象。只读对象是具有至少一个只读属性的对象。只读属性是不能被重新定义的属性。例如,在中具有“configurable=false”特性的属性构成只读属性。重新定义属性会更改属性的定义和/或属性的值。例如,如果具有只读属性的只读对象被代理,则生成的代理对象中的“get(获取)”钩子(hook)必须返回与只读对象返回的属性相同的类型和值。将认识到,尝试重新定义只读对象的只读属性会导致关于只读对象的代理(例如,期间)的错误发生。例如,这样的错误可以导致异常被抛出。只读对象的一种示例类型是函数对象。函数对象是定义函数的对象。
5.在第一示例方法中,从ecmascript引擎接收对目标ecmascript对象的请求。目标ecmascript对象包括多个属性。处理程序(handler)对象被定义,处理程序对象被配置为对目标ecmascript对象的属性执行相应的操作。确定目标ecmascript对象是否包括至少一个只读属性。如果属性不能被重新定义,则目标ecmascript对象的每个属性是只读的。如果属性能够被重新定义,则目标ecmascript对象的每个属性不是只读的。至少部分地基于目标ecmascript对象是否包括至少一个只读属性,从多个代理技术中选择用于代理目标ecmascript对象的代理技术。代理技术包括第一代理技术和第二代理技术。响应于请求目标ecmascript对象的请求,目标ecmascript对象使用选择的代理技术被代理,以生成代理的目标ecmascript对象。代理目标ecmascript对象包括第一操作或第二操作。第一操作包括创建新的目标ecmascript对象以替换目标ecmascript对象,以及至少将处理程序对象与
新的目标ecmascript对象相关联,以及至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象。第二操作包括将处理程序对象应用于目标ecmascript对象,以至少部分地基于未包括至少一个只读属性的目标ecmascript对象而使用第二代理技术来生成代理的目标ecmascript对象。
6.在第二示例方法中,确定请求的目标ecmascript对象包括至少一个只读属性。如果属性不能被重新定义,则请求的目标ecmascript对象的每个属性是只读的。如果属性能够被重新定义,则请求的目标ecmascript对象的每个属性不是只读的。通过执行操作,至少部分地基于确定请求的目标ecmascript对象包括至少一个只读属性来代理请求的目标ecmascript对象,以生成代理的目标ecmascript对象。这些操作包括创建新的目标ecmascript对象来替换请求的目标ecmascript对象。操作还包括将多个处理程序对象与新的目标ecmascript对象相关联,多个处理程序对象被配置为对请求的目标ecmascript对象的属性执行多个相应的操作,以生成代理的目标ecmascript对象。
7.提供本发明内容以以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步被描述。本发明内容并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。此外,应注意,本发明不限于在具体实施方式和/或本文的其他部分中描述的特定实施例。这些实施例在本文中仅出于说明性目的而被呈现。基于本文包含的教导,其他实施例对于相关领域的技术人员将是显而易见的。
附图说明
8.并入本文并形成说明书一部分的附图说明了本发明的实施例,并且与描述一起进一步用于解释所涉及的原理并使相关领域的技术人员能够做出并使用公开的技术。
9.图1a是根据实施例的示例增强代理系统的框图。
10.图1b是根据实施例的图1a所示的包括正向代理服务器的增强代理系统的示例实现的框图。
11.图1c是根据实施例的图1a所示的包括反向代理服务器的增强代理系统的另一个示例实现的框图。
12.图2示出了根据实施例的代理目标ecmascript对象的示例代码。
13.图3示出了根据实施例的尝试重新定义只读对象的只读属性的示例代码。
14.图4示出了根据实施例的定义函数对象以递归地包装文档对象的示例代码。
15.图5和图6示出了根据实施例的将只读对象区别于其他对象的示例代码。
16.图7示出了根据实施例的通过创建空对象来启动目标ecmascript对象的代理的示例代码。
17.图8示出了根据实施例的尝试代理空函数对象(即,具有空目标ecmascript对象的函数对象)的示例代码。
18.图9示出了根据实施例的通过创建空函数对象来启动代理函数对象的代理的示例代码。
19.图10示出了根据实施例的通过创建空函数对象和代理空函数对象的默认属性来启动函数对象的代理的示例代码。
20.图11描绘了根据实施例的用于无论目标ecmascript对象是否是只读对象都代理
目标ecmascript对象的示例方法的流程图。
21.图12描绘了根据实施例的用于无论属性对象是否是只读对象都代理每个属性对象的示例方法的流程图。
22.图13是根据实施例的图1所示的代理服务器的示例实现的框图。
23.图14描绘了可以实现实施例的示例计算机。
24.当结合附图进行以下阐述的详细描述时,所公开技术的特征和优点将变得更加明显,附图中相同的参考标号自始至终标识对应的元件。在附图中,相似的参考编号通常表示相同的、功能相似的和/或结构相似的元件。元件首次出现的附图由相应参考编号中最左边的数字表示。
具体实施方式
25.一、简介
26.以下具体实施方式参考了示出本发明示例性实施例的附图。然而,本发明的范围不限于这些实施例,而是由所附权利要求限定。因此,附图中所示的实施例之外的实施例(诸如所示实施例的修改版本)仍然可以包括在本发明中。
27.说明书中对“一个实施例”、“实施例”、“示例实施例”等的引用表示所描述的实施例可以包括特定特征、结构或特性,但每个实施例不一定包括特定特征、结构或特性。此外,这些短语不一定指相同的实施例。此外,当结合实施例描述特定特征、结构或特性时,提出相关领域的技术人员在知识范围内结合无论是否明确描述的其他实施例来实现这样的特征、结构或特性。
28.诸如“第一”、“第二”、“第三”等的描述符用于引用本文讨论的一些元件。这样的描述符用于促进对示例实施例的讨论并且不指示所引用的元件的所需顺序,除非在此做出肯定的陈述(即需要这样的顺序)。
29.二、示例实施例
30.在此描述的示例实施例能够无论目标ecmascript对象是否是只读对象都代理目标ecmascript对象。只读对象是具有至少一个只读属性的对象。只读属性是不能重新被定义的属性。例如,在中具有“configurable=false”特性的属性构成只读属性。重新定义属性会更改属性的定义和/或属性的值。例如,如果代理了具有只读属性的只读对象,则生成的代理对象中的“get”钩子必须返回与只读对象返回的属性相同的类型和值。将认识到,尝试重新定义只读对象的只读属性会导致关于只读对象的代理(例如,期间)的错误发生。例如,这样的错误可能会导致异常被抛出。只读对象的一种示例类型是函数对象。函数对象是定义函数的对象
31.与用于代理资源对象的常规技术相比,本文描述的示例技术具有多种益处。例如,示例技术可能能够代理资源的只读对象。示例技术可能能够无论将被代理的对象或方法的属性定义和结构都根据es6和ecmascript的后续版本代理资源的任何对象或方法。因此,示例技术可以允许在ecmascript引擎中的所有对象(例如,包括ecmascript引擎的浏览器中的所有对象)上使用代理对象。示例技术可以相对轻松地钩子ecmascript对象并控制相应的插件行动。示例技术可以启用整个全局对象的递归代理。
32.示例技术可以通过包装资源的对象来增加资源的安全性。示例技术可以减少用于
监视和/或控制资源的时间和/或资源(例如,处理器、存储器、网络带宽)的量。例如,通过代理资源的只读对象,不必执行传统上为了提供关于此类对象的控制和安全性而执行的附加步骤。示例技术可以提高用于代理资源对象的代理服务器的效率。例如,示例技术可以递归代理(例如,自动递归代理)目标ecmascript对象的属性,这可以提高代理服务器的效率。示例技术可以提高用户效率(例如,通过减少用户(例如,it管理员)尝试提供关于代理对象的控制和安全性的步骤数量和/或时间量)。例如,递归地代理资源的对象可以减少(例如,消除)用户手动执行尝试提供关于对象的控制和安全性的需要的操作。
33.图1a是根据实施例的示例增强代理系统100a的框图。一般而言,增强代理系统100a操作以响应于从用户接收的请求(例如,超文本传输协议(http)请求)而向用户(例如,软件工程师、应用程序开发人员等)提供信息。该信息可以包括文档(例如,网页、图像、音频文件、视频文件等)、可执行文件的输出和/或任何其他合适类型的信息。根据这里描述的示例实施例,增强代理系统100a无论目标ecmascript对象是否是只读对象都代理目标ecmascript对象。
34.如图1a所示,增强代理系统100a包括多个用户装置102a-102m、网络104、多个网络服务器106a-106n和代理服务器108。用户装置102a-102m、网络服务器106a-106n与代理服务器108之间的通信使用公知的网络通信协议在网络104上被执行。网络104可以是广域网(例如,因特网)、局域网(lan)、另一种类型的网络、或它们的组合。
35.用户装置102a-102m是能够与网络服务器106a-106n通信的处理系统。处理系统的示例是包括至少一个能够根据指令集操纵数据的处理器的系统。例如,处理系统可以是计算机、个人数字助理等。用户装置102a-102m被配置为向网络服务器106a-106n提供请求以请求存储在网络服务器106a-106n上(或以其他方式可通过网络服务器访问)的信息。例如,用户可以使用部署在由用户所有或用户可以访问的用户装置102上的客户端(例如,网络浏览器、网络爬虫或其他类型的客户端)来发起执行计算机程序(例如,应用)的请求。根据一些示例实施例,用户装置102a-102m能够访问由网络服务器106a-106n托管的域(例如,网站),使得用户装置102a-102m可以访问通过域可用的信息。例如,这样的域可以包括网页,网页可以作为超文本标记语言(html)文档和链接在其中的对象(例如文件)被提供。
36.每个用户装置102a-102m可以包括任何客户端启用的系统或装置,包括但不限于台式计算机、膝上型计算机、平板计算机、可穿戴计算机(诸如智能手表或头戴式计算机)、个人数字助理、蜂窝电话、物联网(iot)装置等。将认识到,任何一个或多个用户装置102a-102m可以与任何一个或多个网络服务器106a-106n通信。
37.第一用户装置102a包括浏览器110。浏览器110是被配置为使用户装置102a的用户能够访问万维网(www)上的资源的软件应用。例如,当用户提供对资源的请求时,浏览器从网络服务器106a-106n中的一个或多个网络服务器检索资源并提供资源以在用户装置102a上显示给用户。例如,对资源的请求可以包括与托管资源的位置(例如,网络服务器上的存储器位置)对应的统一资源标识符(uri)。uri可以是统一资源定位符(url)或统一资源名称(urn)。在接收到请求时,浏览器110可以基于uri从托管资源的网络服务器检索资源。将认识到该资源可以是网页的资源(例如,超文本标记语言(html)文档)。
38.浏览器110包括客户端侧ecmascript引擎114a。客户端侧ecmascript引擎114a是执行ecmascript代码的计算机程序。例如,客户端侧ecmascript引擎114a可以解释
ecmascript代码并执行代码的即时编译。浏览器110可以包括其他引擎,诸如渲染引擎。例如,ecmascript引擎114a可以通过文档对象模型(dom)与渲染引擎结合运行,以便检索到的资源可以被转换成第一用户装置102a上的交互式视觉表示。
39.出于说明的目的,浏览器110被显示为结合在第一用户装置102a中并且不旨在进行限制。将认识到,浏览器110可以被并入任何用户装置102a-102m中。例如,每个用户装置102a-102m可以包括各自的浏览器。
40.网络服务器106a-106n是能够与用户系统102a-102m通信的处理系统。网络服务器106a-106n被配置为响应于接收到来自用户的请求而执行向用户提供资源的计算机程序。例如,资源可以包括文档(例如,网页、图像、音频文件、视频文件等)、可执行文件的输出或任何其他合适类型的资源。根据一些示例实施例,网络服务器106a-106n被配置为托管相应的网站,使得增强代理系统100a的用户可以访问这些网站。
41.第一网络服务器106a包括服务器侧ecmascript引擎114b。服务器侧ecmascript引擎114b是执行ecmascript代码的计算机程序。
42.代理服务器108是充当客户端装置102a-102m和网络服务器106a-106n之间的中介以拦截由客户端装置102a-102m发起的向网络服务器106a-106n请求资源的请求的处理系统。代理服务器108包括增强代理逻辑112,其能够在将请求的或修改的资源传递给客户端装置102a-102m之前分析和/或修改请求的资源。例如,增强代理逻辑112被配置为无论对象是否是只读对象都代理请求的资源中的对象。
43.在示例实现中,增强代理逻辑112从客户端侧ecmascript引擎114a或服务器侧ecmascript引擎114b接收对目标ecmascript对象的请求。目标ecmascript对象包括多个属性。增强代理逻辑112定义处理程序对象,这些处理程序对象被配置为对目标ecmascript对象的属性执行相应的操作。增强代理逻辑112确定目标ecmascript对象是否包括至少一个只读属性。如果属性不能被重新定义,则目标ecmascript对象的每个属性是只读的。如果属性能够被重新定义,则目标ecmascript对象的每个属性不是只读的。增强代理逻辑112至少部分地基于目标ecmascript对象是否包括至少一个只读属性,从多种代理技术中选择用于代理目标ecmascript对象的代理技术。代理技术包括第一代理技术和第二代理技术。如果目标ecmascript对象包括至少一个只读属性,则增强代理逻辑112选择第一代理技术。如果目标ecmascript对象未包括至少一个只读属性,则增强代理逻辑112选择第二代理技术。响应于请求目标ecmascript对象的请求,增强代理逻辑112使用选择的代理技术来代理目标ecmascript对象,以生成代理的目标ecmascript对象。更具体地,如果目标ecmascript对象包括至少一个只读属性,则增强代理逻辑112通过以下操作使用第一代理技术来代理目标ecmascript对象:(a)创建新的目标ecmascript对象来替换目标ecmascript对象以及(b)至少将处理程序对象与新的目标ecmascript对象相关联,以生成代理的目标ecmascript对象。如果目标ecmascript对象未包括至少一个只读属性,则增强代理逻辑112通过将处理程序对象应用于目标ecmascript对象来使用第二代理技术代理目标ecmascript对象,以生成代理的目标ecmascript对象。
44.增强代理逻辑110可以以各种方式被实现(包括以硬件、软件、固件或其任何组合被实现)为无论目标ecmascript对象是否是只读对象都代理目标ecmascript对象。例如,增强代理逻辑110可以被实现为被配置为在一个或多个处理器中执行的计算机程序代码。在
另一示例中,增强代理逻辑110可以至少部分地被实现为硬件逻辑/电路。例如,增强代理逻辑110可以至少部分地被实现在现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、系统芯片系统(soc)、复杂可编程逻辑器件(cpld)等中。每个soc可以包括集成电路芯片,该集成电路芯片包括一个或多个处理器(例如,微控制器、微处理器、数字信号处理器(dsp)等)、存储器、一个或多个通信接口和/或其他电路和/或嵌入式固件以执行其功能。
45.代理服务器108可以以任何合适的布置耦合到用户装置102a-102m、网络104和/或网络服务器106a-106n。例如,代理服务器108可以被配置为正向代理服务器或反向代理服务器。下面参考图1和图2提供关于正向代理服务器和反向代理服务器的进一步细节。
46.图1b是根据实施例的包括正向代理服务器108b的示例增强代理系统100b的框图。增强代理系统100b是图1a所示的增强代理系统100a的示例实现。如图1b所示,增强代理系统100b包括用户装置102a-102m、网络104和网络服务器106a-106n,所有这些都可以以上面针对图1a描述的方式操作。图1b与图1a不同,图1a的代理服务器108被示为被实现为图1b中的正向代理服务器108b。在以下讨论中,任意用户装置(例如,用户装置102a-102m中的任何一个)将被称为“用户装置102”,并且任意网络服务器(例如,网络服务器106a-106n中的任何一个)将被称为“网络服务器106”。
47.正向代理服务器108b耦合在网络104和用户装置102a-102m之间。正向代理服务器108b通常可以代表用户装置102与网络服务器106a-106n中的一个或多个网络服务器进行通信。当用户装置102将要访问网络服务器106时,用户装置102可以通过正向代理服务器108b(例如,正向代理服务器中的增强代理逻辑112b)向网络104发送请求。用户装置102的用户可以配置正向代理服务器108b耦合在用户装置102和网络104之间。例如,用户可以手动输入正向代理服务器108b的互联网协议(ip)地址以强制浏览器110通过正向代理服务器108b发送每个资源请求。在另一示例中,组织的it管理员可以在组织的本地网络内配置正向代理服务器108b,以强制通过组织的本地网络发起的所有请求通过正向代理服务器108b被发送。
48.用户装置102(例如,浏览器110或用户装置中的ecmascript引擎)可以请求访问托管在网络服务器106上的网页。在图1b的实施例中,请求不直接被发送到网络服务器106。而是,请求被发送到正向代理服务器108b,并且正向代理服务器108b将请求转发到网络服务器106。在网络服务器106从正向代理服务器108b接收到请求之后,网络服务器106将请求的网页发送到正向代理服务器108b。一旦正向代理服务器108b接收到请求的网页,正向代理服务器108b(例如,正向代理服务器中的增强代理逻辑112b)可以确定是否将网页转发给用户装置102。
49.例如,如果正向代理服务器108b由雇主的工作环境中的it管理员管理,则雇主可以设置正向代理服务器108b以阻止用户访问指定站点,例如社交网络、显式站点等。在另一示例中,it管理员可以使用正向代理服务器108b来监控用户的活动,例如,员工在工作中的活动。例如,正向代理服务器108b可以记录员工的活动并检测潜在的异常情况。在又一示例中,正向代理服务器108b可用于解除对被互联网服务提供商(isp)或政府阻止或禁止的站点的阻止。例如,政府可以禁止用户访问某些域,但用户可以使用正向代理服务器108b来解除对被政府阻止的域的阻止。在又一示例中,用户可以使用正向代理服务器108b来掩蔽他
们的ip地址以使用户能够访问一个或多个网络服务器106a-106n。
50.图1c是根据实施例的包括反向代理服务器108c的示例增强代理系统100c的框图。增强代理系统100c是图1a所示的增强型代理系统100a的另一个示例实现。如图1c所示,增强代理系统100c包括用户装置102a-102m、网络104和网络服务器106a-106n,所有这些都可以以上面关于图1a描述的方式操作。图1c与图1a不同,图1a的代理服务器108被示为被实现为图1c中的反向代理服务器108c。
51.反向代理服务器108c耦合在网络104和网络服务器106a-106n之间。反向代理服务器108c通常可以代表网络服务器来与用户装置102a-102m中的一个或多个进行通信。因此,反向代理服务器108c可以充当特定网络服务器106的代理。当客户端102a-102m中的每一个请求访问网络服务器106时,该请求可以被发送到反向代理服务器108c(例如,增强的其中的代理逻辑112c),并且反向代理服务器108c可以将请求转发到网络服务器106。
52.在示例实施例中,反向代理服务器108c不一定需要将请求转发到网络服务器106。例如,反向代理服务器108c可以充当监控被接收的请求所来自的用户装置的ip地址并且阻止列入黑名单的ip地址的安全卫士。反向代理服务器108c可用于实现各种附加功能,包括但不限于清理流量、屏蔽网络服务器106的ip地址以及通过内容发布网络(cdn)提高站点速度。例如,cdn可能已经配置了各种冗余服务器。反向代理服务器108c可以被配置为将访问资源的请求转发到离用户装置102最近的冗余服务器。反向代理服务器108c可以用于降低将网络服务器106暴露给入侵者的风险。反向代理服务器108c可以用作缓存经常访问的网页的缓存服务器。当从用户装置102接收到对经常访问的网页的请求时,反向代理服务器108c可以将缓存的网页发送到用户装置102而不必访问网络服务器106。当缓存的网页被发送到对于用户装置102,反向代理服务器108c可以将网页的原始url更新为缓存内容的url。
53.在另一示例实施例中,可以将反向代理服务器108c的名称作为后缀添加到原始url的末尾。例如,用户装置102请求的网页的原始url可以是“abc.com”,反向代理服务器108c的url可以是“xyz.com”,反向代理服务器108c可以缓存位于与看起来像“abc.com.xyz.com”的url对应的位置的网页,这将反向代理服务器108c的名称添加到原始url的末尾。这种返回在原始url末尾添加自己的名称的url的代理服务器也可以称为“后缀代理”。
54.除了缓存经常访问的网页之外,一些后缀代理还能够修改网页并将修改后的网页存储在与后缀url对应的位置。当浏览器110请求访问网页时,后缀代理可以将浏览器110重定向到后缀url。在这种情况下,使浏览器访问修改后的网页,该修改后的网页可能看起来与原始网页相同,但修改后的网页可能执行不同的操作或功能或与原始网页行为不同。
55.在相应的图1a-1c中示出的代理服务器108、108b和108c中的每个代理服务器可以被配置为反向后缀代理服务器。当反向后缀代理服务器收到对资源的请求时,该请求包括指示资源位置的url,反向后缀代理服务器会在url后附加一个后缀,将用户引导到受政策保护的资源版本。例如,如果用户请求访问dropbox.com,反向后缀代理服务器可能会将microsoft.com附加到url,从而生成dropbox.com.microsoft.com,从而使用户能够访问受microsoft corporation提供的政策保护的版本的dropbox.com。通过使用反向后缀代理服务器,组织可以控制允许用户访问哪些资源、控制允许用户对那些资源执行哪些动作、和/或监视用户执行的动作。
的对象内被定义,该对象不是函数对象。虽然图5的代码500和图6的代码5600被示为定义单个处理程序(即,“get”处理程序),但将认识到代码500和代码600可以定义任何合适的处理程序(例如,get、set、apply、construct等)。
61.图7示出了根据实施例的通过创建空对象来启动目标ecmascript对象的代理的示例代码700。如图7所示,代码700包括函数对象“gethackhandlers”、对象“handlers”和代理对象“microsoft proxy”。函数对象“gethackhandlers”被定义为实现能够对属性执行的所有操作(例如,因为不知道将从返回的代理对象访问哪些属性)。例如,函数对象“gethackhandlers”包括替换get、set、construct、defineproperty、deleteproperty、enumerate、getownpropertydescriptor、getprototypeof、has、isextensible、ownkeys、preventextensions和setprototypeof处理程序的函数对象。替换处理程序的函数对象在本文中也称为处理程序函数对象。
62.对象“handlers”被定义为实现能够对属性执行的选定(例如,少于所有)操作(例如,提供比通过实现所有能够被执行的操作实现的更快和/或更有效的代理)。例如,对象“handlers”显示为实现get、apply、set和construct处理程序,而不实现在函数对象“gethackhandlers”中实现的其他处理程序。在对象“handlers”中,如果目标ecmascript对象包括至少一个只读属性,则通过创建空对象并将函数对象“gethackhandlers”中包括的处理程序函数对象应用到目标ecmascript对象来启动目标ecmascript对象的代理。如果目标ecmascript对象不包括至少一个只读属性,则使用对象“handlers”中定义的处理程序函数对象代理目标ecmascript对象。这将导致目标ecmascript对象的属性的递归代理。
63.代理对象“microsoft proxy”使用对象“handlers”中定义的处理程序函数对象来代理目标ecmascript对象,该对象被标识为全局对象。如对象“handlers”所示,目标ecmascript对象的属性使用用于代理目标ecmascript对象的相同处理程序进行递归代理。然而需要注意的是,如代码700所示创建的空对象实际上包括了一些默认创建的属性。此外,至少一个属性(例如,原型)是只读属性。因此,不是如图7所示通过创建空对象来启动目标ecmascript对象的代理,可以通过创建未包括只读属性的对象来启动代理。例如,可以通过创建根本未包括任何属性的对象来启动代理。例如,在中,object.create(null)可用于创建没有属性的对象。因为对象是由对象构造的,所以如图7所示的空对象是用对象原型创建的;而不包括任何属性的对象可以使用object.create,这是一个允许从原型创建对象的函数。因此,通过给对象“null”原型,对象将在没有原型的情况下被创建。object.create(null)的实现如图10所示。
64.还应注意,即使函数是对象,函数的代理也需要函数目标。例如,即使函数的代理具有对象的所有属性,代理的目标也不能是空对象。如果函数的代理目标是空对象,则无法调用该函数。
65.图8示出了根据实施例的尝试代理空函数对象(即,具有空目标ecmascript对象的函数对象)的示例代码800。如图8所示,函数对象“a”被定义以使单词“hi”打印在控制台上。因此,当调用函数对象“a”时,我们会看到控制台上打印了单词“hi”。如果函数对象“a”的代理“b”未使用处理程序定义,则指示代理的目标长度为零,名称为“a”,没有参数和调用者,并且有空白原型。当代理“b”被调用时,我们看到控制台上打印单词“hi”。通过键入“typeof a”,我们看到“a”的类型是“函数”。通过键入“typeof b”,我们看到“b”的类型也是“函数”。
然后使用没有属性的目标ecmascript对象启动代理“c”,并在没有参数的情况下调用函数对象“a”,从而产生proxy{}。请注意,没有属性的对象是使用object.creat(null)创建的。当调用代理“c”时,会发生错误,因为“c”的类型是“对象”,但“c”的预期类型是“函数”。例如,如果我们输入“typeof c”,结果将是“对象”。无法代理目标“typeof”。为了解决这个问题,可以传递空函数对象,而不是没有属性的对象。
66.图9示出了根据实施例的通过创建空函数对象来启动函数对象的代理的示例代码900。如图9所示,如果目标ecmascript对象包括至少一个只读属性,则确定目标ecmascript对象的类型是否为函数。如果目标ecmascript对象的类型是函数,则通过创建空函数对象并将包括在函数对象“gethackhandlers”中的处理程序函数对象应用于目标ecmascript对象来启动目标ecmascript对象的代理。如果目标ecmascript对象包括至少一个只读属性,但目标ecmascript对象的类型不是函数,通过使用object.create(null)来创建没有属性的对象来启动目标ecmascript对象的代理并将函数对象“gethackhandlers”中包括的处理程序函数对象应用到目标ecmascript对象。如果目标ecmascript对象未包括至少一个只读属性,则使用对象“handlers”中定义的处理程序函数对象代理目标ecmascript对象。这将导致目标ecmascript对象的属性的递归代理。
67.需要注意的是,函数对象“gethackhandlers”被定义为实现所有能够对对象执行的操作。例如,函数对象“gethackhandlers”包括替换get、set、construct、defineproperty、deleteproperty、enumerate、getownpropertydescriptor、getprototypeof、has、isextensible、ownkeys、preventextensions和setprototypeof处理程序的函数。然而,对象“handlers”被定义为实现能够在对象上执行的选定(例如,少于所有)操作(例如,提供比通过实现所有能够被执行的操作实现的更快和/或更有效的代理)。例如,对象“handlers”在图9中被示出,以实现get、apply、set和construct处理程序,并且不实现在函数对象“gethackhandlers”中实现的其他处理程序。
68.还需要说明的是,如代码900所示创建的空函数对象实际上包括了一些属性,这些属性是默认创建的。此外,至少一个属性是只读属性。这一点可以通过一个简单的例子来说明,其中键入“c=function(){}”会导致f(){}。如果我们随后键入“object.getownpropertynames(c)”,我们会看到“c”的属性是“长度(length)”、“名称(name)”、“参数(arguments)”、“调用方(caller)”、“原型(prototype)”。可以看出,“原型”是只读属性,并且如图9所示代理空函数对象会导致错误。因此,除了如图9所示通过创建空函数对象来代理函数对象外,还可以代理空函数对象的默认属性以避免上述错误。
69.图10示出了根据实施例的示例代码1000,其通过创建空函数对象以及代理空函数对象的默认属性来启动函数对象的代理。如图10所示,如果目标ecmascript对象包括至少一个只读属性,则确定目标ecmascript对象的类型是否为函数。如果目标ecmascript对象的类型是函数,则通过创建空函数对象并使用对象“handlers”中包括的处理函数代理目标ecmascript对象的默认属性来启动目标ecmascript对象的代理。需要注意的是,默认属性的值没有改变。因此,默认属性被代理而不改变默认属性的值。然后使用函数对象“gethackhandlers”中包括的处理函数返回代理函数对象。例如,函数对象“gethackhandlers”中包括的处理函数应用于目标ecmascript对象的属性以提供代理函数对象。因此,默认属性在函数对象“gethackhandlers”中包括的处理函数应用于目标
ecmascript对象的属性之前被代理。通过预先代理默认属性,无需重新代理默认属性。预先代理的默认属性可以“按原样”返回,并保持符合与只读属性相关联的只读限制。
70.如果目标ecmascript对象不是只读对象,则代码1000如上文参照图9的代码900所描述的那样继续。特别地,如果目标ecmascript对象包括至少一个只读属性,但目标ecmascript对象的类型不是函数,则通过使用object.create(null)创建没有属性的对象并将函数对象“gethackhandlers”中包括的处理程序函数应用于目标ecmascript对象来启动目标ecmascript对象的代理。如果目标ecmascript对象不包括至少一个只读属性,则使用对象“handlers”中定义的处理程序函数代理目标ecmascript对象。这将导致目标ecmascript对象的属性的递归代理。
71.图11描绘了根据实施例的用于无论目标ecmascript对象是否是只读对象都代理目标ecmascript对象的示例方法的流程图1100。图12描绘了根据实施例的用于无论属性对象是否是只读对象都代理每个属性对象的示例方法的流程图1200。例如,流程图1100和1200可以由相应的图1a、图1b和图1c中所示的增强代理逻辑112、112b或112c来执行。为了说明的目的,流程图1100和1200是针对图13中所示的代理服务器1300来描述的。根据实施例,代理服务器1300包括增强代理逻辑1312,其是增强代理逻辑112、112b或112c的示例。如图13所示,增强代理逻辑1312包括定义逻辑1302、确定逻辑1304、选择逻辑1306和代理逻辑1308。基于关于流程图1100和1200的讨论,进一步的结构和操作实施例对于相关领域的技术人员将是显而易见的。
72.如图11所示,流程图1100的方法开始于步骤1102。在步骤1102,从ecmascript引擎接收请求目标ecmascript对象的请求。目标ecmascript对象包括属性。例如,目标ecmascript对象可以是目标只读对象。目标只读对象可以是目标函数对象,但示例实施例的范围不限于此。目标ecmascript对象是“对象”类型。目标函数对象是“函数”类型并且进一步是“对象”类型。“函数”类型优先于“对象”类型。因此,目标函数对象通常被称为“函数”类型(例如,不提及“对象”类型)。在示例实现中,定义逻辑1302和/或确定逻辑1304从ecmascript引擎接收对目标ecmascript对象的请求1310。
73.在步骤1104,定义被配置为对目标ecmascript对象的属性执行相应操作的处理程序对象。在示例实现中,定义逻辑1302定义处理程序对象1318。
74.在示例实施例中,在步骤1104定义处理程序对象包括将处理程序对象绑定到目标ecmascript对象。
75.在步骤1106,确定目标ecmascript对象是否包括至少一个只读属性。如果目标ecmascript对象的每个属性无法被重新定义(例如,在不导致目标ecmascript对象的代理(例如,期间)发生错误的情况下,无法被重新定义),则该属性是只读的。如果目标ecmascript对象的每个属性能够被重新定义(例如,在不导致目标ecmascript对象的代理发生错误的情况下,能够被重新定义),则该属性不是只读的。如果目标ecmascript对象包括至少一个只读属性,则流程继续到步骤1108。否则,流程继续到步骤1112。在示例实现中,确定逻辑1304确定目标ecmascript对象是否包括至少一个只读属性。确定逻辑1304可以生成指示(例如,指定)目标ecmascript对象是否包括至少一个只读属性的只读指示符1314。例如,只读指示符1314可以具有基于具有至少一个只读属性的目标ecmascript对象的第一值(例如,二进制“1”)。在另一示例中,只读指示符可以具有基于不具有至少一个只读属性
的目标ecmascript对象的第二值(例如,二进制“0”)。
76.在示例实施例中,在步骤1106确定目标ecmascript对象是否包括至少一个只读属性包括确定目标ecmascript对象是否包括具有指定ecmascript属性不可配置的特性的ecmascript属性。具有指定ecmascript属性不可配置的特性的ecmascript属性指示ecmascript属性是只读的。ecmascript属性不具有指定ecmascript属性不可配置的特性的ecmascript属性指示ecmascript属性不是只读的。
77.在步骤1108,选择用于代理目标ecmascript对象的第一代理技术。例如,可以从多种代理技术中选择第一代理技术。根据该示例,包括至少一个只读属性的目标ecmascript对象可以指示将要从多种代理技术中选择第一代理技术。可以在步骤1108至少部分地基于(例如,作为结果)包括至少一个只读属性的目标ecmascript对象来选择第一代理对象。在示例实现中,选择逻辑1306选择第一代理技术。例如,选择逻辑1306可以基于(例如,至少部分地基于)具有至少一个只读属性的目标ecmascript对象来选择第一代理技术。根据该示例,选择逻辑1306可以检查只读指示符1314以确定只读指示符1314指示目标ecmascript对象包括至少一个只读属性。指示目标ecmascript对象包括至少一个只读属性的只读指示符1314可以触发选择逻辑1306选择第一代理技术。选择逻辑1306可以生成技术指示符1316以指示用于代理目标ecmascript对象的第一代理技术已被选择。
78.在步骤1110,通过创建新的目标ecmascript对象来替换目标ecmascript对象并至少将处理程序对象与新的目标ecmascript对象相关联,以使用第一代理技术代理目标ecmascript对象来生成代理的目标ecmascript对象。在完成步骤1110后,流程继续到步骤1116。在示例实现中,代理逻辑1308使用第一代理技术代理目标ecmascript对象。例如,代理逻辑1308可以响应于技术指示符(例如,基于指示用于代理目标ecmascript对象的第一代理技术已被选择的技术指示符1316)的接收而使用第一代理技术代理目标ecmascript对象。根据该实现,代理逻辑1308通过创建新的目标ecmascript对象来替换目标ecmascript对象并至少将处理程序对象1318与新的目标ecmascript对象相关联,以使用第一代理技术代理目标ecmascript对象来生成代理的目标ecmascript对象1320。
79.在步骤1112,选择第二代理技术来代理目标ecmascript对象。例如,可以从多种代理技术中选择第二代理技术。根据该示例,未包括至少一个只读属性的目标ecmascript对象可以指示第二代理技术被从多种代理技术中被选择。在步骤1112,可以至少部分地基于(例如,作为结果)未包括至少一个只读属性的目标ecmascript对象来选择第二代理对象。在示例实现中,选择逻辑1306选择第二代理技术。例如,选择逻辑1306可以基于(例如,至少部分地基于)不具有至少一个只读属性的目标ecmascript对象来选择第二代理技术。根据该示例,选择逻辑1306可以检查只读指示符1314以确定只读指示符1314指示目标ecmascript对象未包括至少一个只读属性。指示目标ecmascript对象未包括至少一个只读属性的只读指示符1314可以触发选择逻辑1306选择第二代理技术。选择逻辑1306可以生成技术指示符1316以指示用于代理目标ecmascript对象的第二代理技术已被选择。
80.在步骤1114,通过将处理程序对象应用到目标ecmascript对象来使用第二代理技术代理目标ecmascript对象,以生成代理的目标ecmascript对象。在完成步骤1114之后,流程继续到步骤1116。在示例实现中,代理逻辑1308使用第二代理技术代理目标ecmascript对象。例如,响应于技术指示符(例如,基于指示用于代理目标ecmascript对象的第二代理
技术已被选择的技术指示符1316)的接收,代理逻辑1308可以使用第二代理技术来代理目标ecmascript对象。根据该实现,代理逻辑1308通过将处理程序对象1318应用于目标ecmascript对象来使用第二代理技术代理目标ecmascript对象,以生成代理的目标ecmascript对象1320。
81.在步骤1116,代理的目标ecmascript对象被提供给ecmascript引擎。例如,响应于(例如,至少部分地基于)请求目标ecmascript对象的请求的接收,可以将代理的目标ecmascript对象提供给ecmascript引擎。在示例实现中,代理逻辑1308将代理的目标ecmascript对象1320提供给ecmascript引擎(例如,响应于请求1310)。
82.在示例实施例中,在步骤1104,定义处理程序对象包括定义多个处理程序对象,多个处理程序对象被配置为对目标ecmascript对象的属性执行多个相应的操作。多个处理程序对象包括处理程序对象。进一步根据该实施例,在步骤1110,使用第一代理技术代理目标ecmascript对象包括使用最初不具有只读属性的新的目标ecmascript对象启动目标ecmascript对象的代理,并且将多个处理程序对象中的至少一部分添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象。
83.在该实施例的一方面中,在步骤1110,使用第一代理技术代理目标ecmascript对象包括使用最初不具有属性的新的目标ecmascript对象来启动目标ecmascript对象的代理,并且将多个处理程序对象添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术生成代理的目标ecmascript对象。例如,可以在目标ecmascript对象而不是新的目标ecmascript对象上调用钩子。可以说,目标ecmascript对象的代理是在新的目标ecmascript对象上初始化的。
84.在该实施例的另一方面,在步骤1110使用第一代理技术代理目标ecmascript对象包括基于(例如,使用)空原型创建新的目标ecmascript对象。空原型可以用作object.create的参数,以创建新的目标ecmascript对象。
85.在另一示例实施例中,目标ecmascript对象是目标函数对象,新的目标ecmascript对象是新的目标函数对象。根据本实施例,在步骤1104,定义处理程序对象包括定义多个处理程序对象,这些处理程序对象被配置为对目标功能对象的属性执行多个相应的操作。多个处理程序对象包括处理程序对象。进一步根据该实施例,在步骤1110,使用第一代理技术代理目标ecmascript对象包括使用最初具有一个或多个函数属性的新的目标函数对象启动目标函数对象的代理,将处理程序对象应用到一个或多个函数属性,并且将多个处理程序对象添加到新的目标函数对象,以至少部分地基于目标函数对象包括至少一个只读属性而使用第一代理技术生成代理的目标ecmascript对象。例如,将处理程序对象应用到一个或多个函数属性可以包括将新的目标函数对象的预定义(例如,默认)属性覆盖为相应预定义属性的相应代理。
86.在一些示例实施例中,可以不执行流程图1100的一个或多个步骤1102、1104、1106、1108、1110、1112、1114和/或1116。此外,可以执行除了步骤1102、1104、1106、1108、1110、1112、1114和/或1116之外的步骤或代替步骤1102、1104、1106、1108、1110、1112、1114和/或1116的步骤。例如,在示例实施例中,流程图1100的方法包括通过将前置语句插入到目标ecmascript对象的每个ecmascript脚本的开头以及将附加语句插入到相应
ecmascript脚本的结尾来包装目标ecmascript对象以提供目标ecmascript对象的代理对象树。前置语句和附加语句中的每个都可以是一行代码。包装器是“钩子”的一种示例类型。钩子是插入网页(例如,嵌入网页中的脚本)中的一行或多行代码,以将对象包装在网页中、改变网页的行为和/或响应(例如,基于)事件的发生。因此,在包装器中包装对象在本文中可以在更广泛的意义上被称为对对象进行“挂钩”或作为执行对象的结果而执行的动作。
87.在另一示例实施例中,分层对象结构包括多个分层级别。分层级别包括顶级和低于顶级的一个或多个子级。目标ecmascript对象是顶级中的分层对象的结构的根。定义属性的对象被称为属性对象。对象的每个属性都由子级中的属性对象表示,该子级紧接在包括相应的对象的分层级别之下。根据该实施例,流程图1100的方法包括图12的流程图1200中所示的一个或多个步骤。如图12所示,流程图1200的方法开始于步骤1202。在步骤1202中,属性对象被标识。在示例实现中,确定逻辑1304标识属性对象。
88.在步骤1204,确定属性对象是否至少包括一个只读属性。如果该属性不能被重新定义(例如,在不导致针对属性对象的代理(例如,期间)发生错误的情况下,不能被重新定义),则该属性对象的每个属性都是只读的。如果该属性能够被重新定义(例如,在不导致针对属性对象的代理发生错误的情况下,能够被重新定义),则该属性对象的每个属性都不是只读的。如果属性对象包括至少一个只读属性,则流程继续到步骤1206。否则,流程继续到步骤1210。在示例实现中,确定逻辑1304确定属性对象是否包括至少一个只读属性。确定逻辑1304可以生成只读指示符1314以指示属性对象是否包括至少一个只读属性。例如,只读指示符1314可以具有基于具有至少一个只读属性的属性对象的第一值。在另一示例中,只读指示符可以具有基于不具有至少一个只读属性的属性对象的第二值。
89.在步骤1206,选择用于代理属性对象的第一代理技术(例如,至少部分地基于属性对象包括至少一个只读属性)。在示例实现中,选择逻辑1306选择第一代理技术。根据该实现,选择逻辑1306可以检查只读指示符1314以确定只读指示符1314指示属性对象包括至少一个只读属性。选择逻辑1306可以至少部分地基于指示属性对象包括至少一个只读属性的只读指示符1314选择第一代理技术。
90.在步骤1208,通过创建新的属性对象来替换属性对象并至少将处理程序对象与新的属性对象相关联来使用第一代理技术代理属性对象,以生成代理的属性对象。在完成步骤1208之后,流程继续到步骤1214。在示例实现中,代理逻辑1308使用第一代理技术代理属性对象。例如,代理逻辑1308可以响应于技术指示符(例如,基于指示用于代理属性对象的第一代理技术已被选择的技术指示符1316)的接收而使用第一代理技术来代理属性对象。根据该实现,代理逻辑1308通过创建新的属性对象来替换属性对象并至少将处理程序对象1318与新的属性对象相关联来使用第一代理技术代理属性对象,以生成代理的属性对象。
91.在步骤1210,选择用于代理属性对象的第二代理技术(例如,至少部分地基于属性对象未包括至少一个只读属性)。在示例实现中,选择逻辑1306选择第二代理技术。根据该实现,选择逻辑1306可以检查只读指示符1314以确定只读指示符1314指示属性对象未包括至少一个只读属性。选择逻辑1306可以至少部分地基于指示属性对象未包括至少一个只读属性的只读指示符1314来选择第二代理技术。
92.在步骤1212,通过将处理程序对象应用到属性对象来使用第二代理技术代理属性对象,以生成代理的属性对象。在完成步骤1212之后,流程继续到步骤1214。在示例实现中,
代理逻辑1308使用第二代理技术代理属性对象。例如,代理逻辑1308可以响应于技术指示符(例如,基于指示用于代理属性对象的第二代理技术已被选择的技术指示符1316)的接收而使用第二代理技术来代理属性对象。根据该实现,代理逻辑1308通过将处理程序对象1318应用于属性对象来使用第二代理技术代理属性对象,以生成代理的属性对象。
93.在步骤1214,代理的属性对象被提供给ecmascript引擎。在示例实现中,代理逻辑1308将代理的属性对象提供给ecmascript引擎。
94.在步骤1216,确定是否将要代理另一属性对象。如果将要代理另一属性对象,则流程返回到步骤1204。否则,流程图1200结束。在示例实现中,确定逻辑1304确定是否将要代理另一属性对象。
95.将认识到,代理服务器1300可以未包括定义逻辑1302、确定逻辑1304、选择逻辑1306、代理逻辑1308和/或增强代理逻辑1312中的一个或多个。此外,代理服务器1300可以包括除了以下组件之外的组件或代替以下组件的组件:定义逻辑1302、确定逻辑1304、选择逻辑1306、代理逻辑1308和/或增强代理逻辑1312。
96.尽管为了方便呈现以特定顺序的顺序描述了一些公开的方法的操作,但是应当理解,这种描述方式包括重新布置,除非在此阐述的特定语言需要特定的顺序。例如,顺序地描述的操作可以在一些情况下被重新布置或同时执行。此外,为了简单起见,附图可能没有显示所公开的方法可以与其他方法结合使用的各种方式。
97.浏览器110、增强代理逻辑112、增强代理逻辑112b、增强代理逻辑112c、客户端侧ecmascript引擎114a、服务器侧ecmascript引擎114b、定义逻辑1302、确定逻辑1304、选择逻辑1306、代理逻辑1308、增强代理逻辑1312、流程图1100和/或流程图1200中的任何一个或多个可以在硬件、软件、固件或其任何组合中被实现。
98.例如,浏览器110、增强代理逻辑112、增强代理逻辑112b、增强代理逻辑112c、客户端侧ecmascript引擎114a、服务器侧ecmascript引擎114b、定义逻辑1302、确定逻辑1304、选择逻辑1306、代理逻辑1308、增强代理逻辑1312、流程图1100和/或流程图1200中的任何一个或多个可以至少部分地被实现为被配置为在一个或多个处理器中执行的计算机程序代码。
99.在另一示例中,浏览器110、增强代理逻辑112、增强代理逻辑112b、增强代理逻辑112c、客户端侧ecmascript引擎114a、服务器侧ecmascript引擎114b、定义逻辑1302、确定逻辑1304、选择逻辑1306、代理逻辑1308、增强代理逻辑1312、流程图1100和/或流程图1200中的任何一个或多个可以至少部分地被实现为硬件逻辑/电路。这种硬件逻辑/电路可以包括一个或多个硬件逻辑组件。硬件逻辑组件的示例包括但不限于现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑器件(cpld)等。例如,soc可以包括集成电路芯片,该集成电路芯片包括一个或多个处理器(例如,微控制器、微处理器、数字信号处理器(dsp)等)、存储器、一个或多个通信接口和/或其他电路和/或嵌入式固件以执行其功能。
100.三、一些示例实施例的进一步讨论
101.不管目标ecmascript对象是否为只读对象都代理目标ecmascript对象的第一示例系统包括存储器和耦合到存储器的一个或多个处理器。一个或多个处理器被配置为从ecmascript引擎接收请求目标ecmascript对象的请求,该目标ecmascript对象包括多个属
性。一个或多个处理器还被配置为定义一个或多个处理程序对象,这些处理程序对象被配置为对目标ecmascript对象的属性执行一个或多个相应的操作。一个或多个处理器还被配置为确定目标ecmascript对象是否包括至少一个只读属性。如果属性不能被重新定义,则目标ecmascript对象的每个属性是只读的。如果属性能够被重新定义,则目标ecmascript对象的每个属性不是只读的。一个或多个处理器还被配置为至少部分地基于目标ecmascript对象是否包括至少一个只读属性,从多种代理技术中选择用于代理目标ecmascript对象的代理技术。多种代理技术包括第一代理技术和第二代理技术。目标ecmascript对象包括至少一个只读属性指示第一代理技术将从多种代理技术中被选择。目标ecmascript对象未包括至少一个只读属性指示第二代理技术将从多种代理技术中被选择。一个或多个处理器还被配置为响应于请求目标ecmascript对象的请求生成代理的目标ecmascript对象,而使用选择的代理技术代理目标ecmascript对象,代理目标ecmascript对象包括:创建新的目标ecmascript对象来替换目标ecmascript对象,并将至少一个或多个处理程序对象与新的目标ecmascript对象相关联,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象;或者将一个或多个处理程序对象应用于目标ecmascript对象以至少部分地基于未包括至少一个只读属性的目标ecmascript对象而使用第二代理技术来生成代理的目标ecmascript对象。
102.在第一示例系统的第一方面中,一个或多个处理器被配置为定义多个处理程序对象,这些处理程序对象被配置为对目标ecmascript对象的属性执行多个相应的操作。根据第一方面,多个包装处理程序对象包括一个或多个包装处理程序对象。进一步根据第一方面,一个或多个处理器被配置为使用最初没有只读属性的新的目标ecmascript对象来初始化目标ecmascript对象的代理,并且将多个处理程序对象的至少一部分添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象。
103.在第一示例系统的第一方面的第一实现中,一个或多个处理器被配置为使用最初没有属性的新的目标ecmascript对象来启动目标ecmascript对象的代理,并将多个处理程序对象添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象。
104.在第一示例系统的第一方面的第二实现中,一个或多个处理器被配置为基于空原型创建新的目标ecmascript对象。
105.在第一示例系统的第二方面中,目标ecmascript对象是目标函数对象。根据第二方面,新的目标ecmascript对象是新的目标函数对象。进一步根据第二方面,一个或多个处理器被配置为定义多个处理程序对象,这些处理程序对象被配置为对目标函数对象的属性执行多个相应的操作。多个处理程序对象包括一个或多个处理程序对象。进一步根据第二方面,一个或多个处理器被配置为使用最初具有一个或多个函数属性的新的目标函数对象来启动目标函数对象的代理,将一个或多个处理程序对象应用于一个或多个函数属性,并且将多个处理程序对象添加到新的目标函数对象,以至少部分地基于目标函数对象包括至少一个只读属性而使用第一代理技术来生成代理的目标ecmascript对象。第一示例系统的第二方面可以结合第一示例系统的第一方面被实现,但是示例实施例不限于此方面。
106.在第一示例系统的第三方面,一个或多个处理器被配置为通过将一个或多个处理程序对象绑定到目标ecmascript对象来定义一个或多个处理程序对象。第一示例系统的第三方面可以结合第一示例系统的第一方面和/或第二方面被实现,但是示例实施例不限于这方面。
107.在第一示例系统的第四方面,分层对象结构包括多个分层级别。多个分层级别包括顶级和低于顶级的一个或多个子级。根据第四方面,目标ecmascript对象是顶级中的分层对象的结构的根,并且对象的每个属性由子级中的属性对象表示,该子级紧接在包括相应的对象的分层级别之下。进一步根据第四方面,一个或多个处理器被配置为,针对每个属性对象确定该属性对象是否包括至少一个只读属性。进一步根据第四方面,一个或多个处理器被配置为,针对每个属性对象,至少部分地基于属性对象是否包括至少一个只读属性,从多个代理技术中选择用于代理属性对象的代理技术。多个代理技术包括第一代理技术和第二代理技术。属性对象包括至少一个只读属性指示第一代理技术将从多个代理技术中被选择。属性对象未包括至少一个只读属性指示第二代理技术将从多个代理技术中被选择。进一步根据第四方面,一个或多个处理器被配置为,针对每个属性对象,使用选择的代理技术代理属性对象以生成代理属性对象,代理属性对象包括:创建新的属性对象来替换属性对象,并将至少一个或多个处理程序对象与新的属性对象相关联,以至少部分地基于属性对象包括至少一个只读属性而使用第一代理技术来生成代理的属性对象;或者将一个或多个处理程序对象应用于属性对象的每个属性,以至少部分地基于属性对象未包括至少一个只读属性而使用第二代理技术来生成代理的属性对象。第一示例系统的第四方面可以结合第一示例系统的第一方面、第二方面和/或第三方面被实现,但是示例实施例不限于这方面。
108.在第一示例系统的第五方面中,一个或多个处理器被配置为通过将前置语句插入到每个ecmascript脚本的开头以及将附加语句插入到相应ecmascript脚本的结尾来包装目标ecmascript对象,以提供目标ecmascript对象的代理对象树。
109.在第一示例系统的第六方面,一个或多个处理器被配置为通过确定目标ecmascript对象是否包括具有指定ecmascript属性不可配置的特性的ecmascript属性来确定目标ecmascript对象是否包括至少一个只读属性。具有指定ecmascript属性不可配置的特性的ecmascript属性指示ecmascript属性是只读的。不具有指定ecmascript属性不可配置的特性的ecmascript属性指示ecmascript属性不是只读的。第一示例系统的第六方面可以结合第一示例系统的第一方面、第二方面、第三方面、第四方面和/或第五方面被实现,但是示例实施例不限于此方面。
110.第二示例系统包括存储器和耦合到存储器的一个或多个处理器。一个或多个处理器被配置为确定所请求的目标ecmascript对象是否包括至少一个只读属性。如果属性不能被重新定义,则请求的目标ecmascript对象的每个属性都是只读的。如果属性能够被重新定义,则请求的目标ecmascript对象的每个属性都不是只读的。一个或多个处理器还被配置为通过执行操作,来至少部分地基于确定请求的目标ecmascript对象包括至少一个只读属性来代理请求的目标ecmascript对象,以生成代理的目标ecmascript对象。操作包括创建新的目标ecmascript对象来替换请求的目标ecmascript对象。操作还包括将多个处理程序对象与新的目标ecmascript对象相关联,多个处理程序对象被配置为对所请求的目标
ecmascript对象的属性执行多个相应的操作,以生成代理的目标ecmascript对象。
111.在第二示例系统的第一方面,一个或多个处理器被配置为通过执行包括以下操作的操作,至少部分地基于确定请求的目标ecmascript对象包括至少一个只读属性来代理请求的目标ecmascript对象:将新的目标ecmascript对象创建为最初没有只读属性;将多个处理程序对象中的至少一部分添加到新的目标ecmascript对象,以生成代理的目标ecmascript对象。
112.在第二示例系统的第二方面,请求的目标ecmascript对象是目标函数对象。根据第二方面,新的目标ecmascript对象是新的目标函数对象。进一步根据第二方面,通过执行包括以下操作的操作,一个或多个处理器被配置为至少部分地基于确定请求的目标ecmascript对象包括至少一个只读属性来代理请求的目标ecmascript对象:创建新的目标函数对象,以使其最初具有一个或多个函数属性;将多个处理程序对象中的一个或多个处理程序对象应用于一个或多个函数属性;并将多个处理程序对象添加到新的目标函数对象中,以生成代理的目标ecmascript对象。
113.在无论目标ecmascript对象是否为只读对象都代理目标ecmascript对象的第一示例方法中,从ecmascript引擎接收请求包括多个属性的目标ecmascript对象的请求。定义了一个或多个处理程序对象,这些处理程序对象被配置为对目标ecmascript对象的属性执行一个或多个相应的操作。确定目标ecmascript对象是否包括至少一个只读属性。如果属性不能被重新定义,则目标ecmascript对象的每个属性是只读的。如果属性能够被重新定义,则目标ecmascript对象的每个属性不是只读的。至少部分地基于目标ecmascript对象是否包括至少一个只读属性,从多个代理技术中选择用于代理目标ecmascript对象的代理技术。多个代理技术包括第一代理技术和第二代理技术。目标ecmascript对象包括至少一个只读属性指示第一代理技术将从多个代理技术中被选择。目标ecmascript对象未包括至少一个只读属性指示第二代理技术将从多个代理技术中被选择。响应于请求目标ecmascript对象的请求,使用选定的代理技术来代理目标ecmascript对象以生成代理的目标ecmascript对象,代理目标ecmascript对象包括:创建新的目标ecmascript对象以替换目标ecmascript对象以及,将至少一个或多个处理程序对象与新的目标ecmascript对象相关联,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象;或者将一个或多个处理程序对象应用于目标ecmascript对象,以至少部分地基于未包括至少一个只读属性的目标ecmascript对象而使用第二代理技术来生成代理的目标ecmascript对象。
114.在第一示例方法的第一方面,定义一个或多个处理程序对象包括定义多个处理程序对象,多个处理程序对象被配置为对目标ecmascript对象的属性执行多个相应的操作。多个处理程序对象包括一个或多个处理程序对象。根据第一方面,代理目标ecmascript对象包括使用新的目标ecmascript对象启动目标ecmascript对象的代理,该新目标ecmascript对象最初没有只读属性,并且将多个处理程序对象的至少一部分添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术生成代理的目标ecmascript对象。
115.在第一示例方法的第一方面的第一实现中,代理目标ecmascript对象包括使用最初没有属性的新的目标ecmascript对象来启动目标ecmascript对象的代理,并且将多个处
理程序对象添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象。
116.在第一示例方法的第一方面的第二实现中,代理目标ecmascript对象包括基于空原型创建新的目标ecmascript对象。
117.在第一示例方法的第二方面,目标ecmascript对象是目标函数对象。根据第二方面,新的目标ecmascript对象是新的目标函数对象。进一步根据第二方面,定义一个或多个处理程序对象包括定义多个处理程序对象,多个处理程序对象被配置为对目标功能对象的属性执行多个相应的操作。多个处理程序对象包括一个或多个处理程序对象。进一步根据第二方面,代理目标ecmascript对象包括使用最初具有一个或多个函数属性的新的目标函数对象启动目标函数对象的代理,将一个或多个处理程序对象应用于一个或多个函数属性,以及将多个处理程序对象添加到新的目标函数对象,以至少部分地基于目标函数对象包括至少一个只读属性而使用第一代理技术来生成代理的目标ecmascript对象。第一示例方法的第二方面可以与第一示例方法的第一方面结合实现,但是示例实施例不限于此方面。
118.在第一示例方法的第三方面,定义一个或多个处理程序对象包括将一个或多个处理程序对象绑定到目标ecmascript对象。第一示例方法的第三方面可以与第一示例方法的第一方面和/或第二方面结合实现,但示例实施例不限于此方面。
119.在第一示例方法的第四方面,分层对象结构包括多个分层级别。多个分层级别包括顶级和低于顶级的一个或多个子级。根据第四方面,目标ecmascript对象是顶级中分层对象结构的根,并且对象的每个属性由子级中的属性对象表示,该子级紧接在包括相应对象的分层级别之下。进一步根据第四方面,该方法还包括,针对每个属性对象,确定该属性对象是否包括至少一个只读属性。进一步根据第四方面,该方法还包括,针对每个属性对象,至少部分地基于属性对象是否包括至少一个只读属性,从多个代理技术中选择用于代理属性对象的代理技术。多个代理技术包括第一代理技术和第二代理技术。属性对象包括至少一个只读属性指示第一代理技术将从多个代理技术中被选择。属性对象未包括至少一个只读属性指示第二代理技术将从多个代理技术中被选择。进一步根据第四方面,该方法还包括,针对每个属性对象,使用选择的代理技术代理该属性对象以生成代理的属性对象,代理属性对象包括:创建新的属性对象来替换该属性对象以及将至少一个或多个处理程序对象与新的属性对象相关联,以至少部分地基于属性对象包括至少一个只读属性而使用第一代理技术来生成代理属性对象;或者将一个或多个处理程序对象应用于属性对象的每个属性,以至少部分地基于属性对象未包括至少一个只读属性而使用第二代理技术来生成代理属性对象。第一示例方法的第四方面可以与第一示例方法的第一方面、第二方面和/或第三方面结合实现,但是示例实施例不限于此方面。
120.在第一示例方法的第五方面中,第一示例方法包括通过将前置语句插入到每个ecmascript脚本的开头以及将附加语句插入到相应ecmascript脚本的结尾来包装目标ecmascript对象,以提供目标ecmascript对象的代理对象树。第一示例方法的第五方面可以与第一示例方法的第一方面、第二方面、第三方面和/或第四方面结合实现,但示例实施例不限于此方面。
121.在第一示例方法的第六方面,确定目标ecmascript对象是否包括至少一个只读属
性包括确定目标ecmascript对象是否包括具有指定ecmascript属性不可配置的特性的ecmascript属性。具有指定ecmascript属性不可配置的特性的ecmascript属性指示ecmascript属性是只读的。不具有指定ecmascript属性不可配置的特性的ecmascript属性指示ecmascript属性不是只读的。第一示例方法的第六方面可以与第一示例方法的第一方面、第二方面、第三方面、第四方面和/或第五方面结合实现,但示例实施例不限于此方面。
122.在第二示例方法中,确定请求的目标ecmascript对象包括至少一个只读属性。如果属性不能被重新定义,则请求的目标ecmascript对象的每个属性都是只读的。如果属性能够被重新定义,则请求的目标ecmascript对象的每个属性都不是只读的。通过执行操作来至少部分地基于确定请求的目标ecmascript对象包括至少一个只读属性来代理请求的目标ecmascript对象,以生成代理的目标ecmascript对象。这些操作包括创建新的目标ecmascript对象来替换请求的目标ecmascript对象。操作还包括将多个处理程序对象与新的目标ecmascript对象相关联,多个处理程序对象被配置为对请求的目标ecmascript对象的属性执行多个相应的操作,以生成代理的目标ecmascript对象。
123.在第二示例方法的第一方面,创建新的目标ecmascript对象包括创建新的目标ecmascript对象,以使其最初不具有只读属性。根据第一方面,将多个处理程序对象与新的目标ecmascript对象相关联包括将多个处理程序对象的至少一部分添加到新的目标ecmascript对象,以生成代理的目标ecmascript对象。
124.在第二示例方法的第二方面,请求的目标ecmascript对象是目标函数对象。根据第二方面,新的目标ecmascript对象是新的目标函数对象。进一步根据第二方面,创建新的目标ecmascript对象包括创建新的目标函数对象,以使其最初具有一个或多个函数属性。进一步根据第二方面,将多个处理程序对象与新的目标ecmascript对象相关联包括将多个处理程序对象中的一个或多个处理程序对象应用于一个或多个函数属性。进一步根据第二方面,将多个处理程序对象与新的目标ecmascript对象相关联还包括将多个处理程序对象添加到新的目标函数对象,以生成代理的目标ecmascript对象。
125.第一示例计算机程序产品包括计算机可读存储介质,计算机可读存储介质上记录有指令,指令用于使基于处理器的系统能够执行操作以无论目标ecmascript对象是否是只读对象都代理目标ecmascript对象。操作包括定义一个或多个处理程序对象,处理程序对象被配置为对目标ecmascript对象的属性执行一个或多个相应的操作。目标ecmascript对象包括多个属性。操作还包括至少部分地基于从ecmascript引擎请求目标ecmascript对象的请求的接收,来确定目标ecmascript对象是否包括至少一个只读属性。如果属性不能被重新定义,则目标ecmascript对象的每个属性都是只读的。如果属性能够被重新定义,则目标ecmascript对象的每个属性都不是只读的。操作还包括至少部分地基于目标ecmascript对象是否包括至少一个只读属性,从多个代理技术中选择用于代理目标ecmascript对象的代理技术。多个代理技术包括第一代理技术和第二代理技术。目标ecmascript对象包括至少一个只读属性指示第一代理技术将从多个代理技术中被选择。目标ecmascript对象未包括至少一个只读属性指示第二代理技术将从多个代理技术中被选择。操作还包括响应于请求目标ecmascript对象的请求生成代理的目标ecmascript对象,使用选择的代理技术代理目标ecmascript对象,代理目标ecmascript对象包括:创建新的目标ecmascript对象以替换目标ecmascript对象并将至少一个或多个处理程序对象与新的目标ecmascript对象相
关联,以至少部分基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象财产;或者将一个或多个处理程序对象应用于目标ecmascript对象,以至少部分地基于未包括至少一个只读属性的目标ecmascript对象而使用第二代理技术来生成代理的目标ecmascript对象。
126.在第一示例计算机程序产品的方面中,操作包括定义多个处理程序对象,处理程序对象被配置为对目标ecmascript对象的属性执行多个相应的操作。多个处理程序对象包括一个或多个处理程序对象。根据该方面,操作包括使用最初不具有只读属性的新的目标ecmascript对象来启动目标ecmascript对象的代理,并将多个处理程序对象中的至少一部分添加到新的目标ecmascript对象,以至少部分地基于包括至少一个只读属性的目标ecmascript对象而使用第一代理技术来生成代理的目标ecmascript对象。
127.第二示例计算机程序产品包括计算机可读存储介质,计算机可读存储介质上记录有指令,指令用于使基于处理器的系统能够执行操作。操作包括确定请求的目标ecmascript对象包括至少一个只读属性。如果属性不能被重新定义,则请求的目标ecmascript对象的每个属性都是只读的。如果属性能够被重新定义,则请求的目标ecmascript对象的每个属性都不是只读的。操作还包括通过执行以下操作来至少部分地基于确定请求的目标ecmascript对象包括至少一个只读属性来代理请求的目标ecmascript对象,以生成代理的目标ecmascript对象:创建新的目标ecmascript对象以替换请求的目标ecmascript对象;将多个用于对请求的目标ecmascript对象的属性进行多个相应操作的处理程序对象与新的目标ecmascript对象相关联,以生成代理的目标ecmascript对象。
128.四、示例计算机系统
129.图14描绘了可以实现实施例的示例计算机1400。图1a-图1c中示出的用户装置102a-102m中的任何一个或多个和/或网络服务器106a-106n中的任何一个或多个;图1a中示出的代理服务器108;图1b中示出的正向代理服务器108b;图1c中示出的反向代理服务器108c;和/或图13中示出的代理服务器1300可以使用包括计算机1400的一个或多个特征和/或替代特征的计算机1400被实现。例如,计算机1400可以是常规个人计算机、移动计算机或工作站形式的通用计算装置,或者计算机1400可以是专用计算装置。本文提供的计算机1400的描述是出于说明的目的,并不旨在进行限制。如相关领域的技术人员所知,实施例可以在其他类型的计算机系统中被实现。
130.如图14所示,计算机1400包括处理单元1402、系统存储器1404和总线1406,总线将包括系统存储器1404的各种系统组件耦合到处理单元1402。总线1406表示几种类型的总线结构中的一种或多种,包括使用各种总线架构中的任何一种的存储器总线或存储器控制器、外围总线、加速图形端口以及处理器或本地总线。系统存储器1404包括只读存储器(rom)1408和随机存取存储器(ram)1410。基本输入/输出系统1412(bios)存储在rom 1408中。
131.计算机1400还具有以下驱动器中的一个或多个:用于从硬盘读取以及写入硬盘的硬盘驱动器1414、用于从可移动磁盘1418读取或写入可移动磁盘1418的磁盘驱动器1416、以及用于从可移动光盘1422(诸如cd rom、dvd rom或其他光学介质)读取或写入可移动光盘1422的光盘驱动器1420。硬盘驱动器1414、磁盘驱动器1416和光盘驱动器1420分别通过硬盘驱动器接口1424、磁盘驱动器接口1426和光盘驱动器接口1428连接到总线1406。驱动
器及其相关联的计算机可读存储介质为计算机提供计算机可读指令、数据结构、程序模块和其他数据的非易失性存储。尽管描述了硬盘、可移动磁盘和可移动光盘,但也可以使用其他类型的计算机可读存储介质来存储数据,诸如闪存卡、数字视频磁盘、随机存取存储器(ram)、只读存储器(rom)等。
132.在硬盘、磁盘、光盘、rom或ram上可以存储多个程序模块。这些程序包括操作系统1430、一个或多个应用程序1432、其他程序模块1434和程序数据1436。应用程序1432或程序模块1434可以包括例如用于实现如本文所述的以下任何一个或多个(例如,至少部分)计算机程序逻辑:浏览器110、增强代理逻辑112、增强代理逻辑112b、增强代理逻辑112c、客户端侧ecmascript引擎114a、服务器侧ecmascript引擎114b、定义逻辑1302、确定逻辑1304、选择逻辑1306、代理逻辑1308、增强代理逻辑1312、流程图1100(包括流程图1100的任何步骤)和/或流程图1200(包括流程图1200的任何步骤)。
133.用户可以通过输入装置(诸如键盘1438和指向装置1440)将命令和信息输入计算机1400。其他输入装置(未示出)可以包括麦克风、操纵杆、游戏手柄、卫星天线、扫描仪、触摸屏、相机、加速度计、陀螺仪等。这些和其他输入装置通常通过耦合到总线1406的串行端口接口1442连接到处理单元1402,但也可以通过其他接口连接,诸如并行端口、游戏端口或通用串行总线(usb)。
134.显示装置1444(例如监视器)也通过接口(诸如视频适配器1446)连接到总线1406。除了显示装置1444之外,计算机1400可以包括其他外围输出装置(未示出),诸如扬声器和打印机。
135.计算机1400通过网络接口或适配器1450、调制解调器1452或用于通过网络建立通信的其他装置连接到网络1448(例如,因特网)。调制解调器1452,可以是内部的或外部的,通过串行端口接口1442连接到总线1406。
136.如本文所用,术语“计算机程序介质”和“计算机可读存储介质”通常用于指代诸如与硬盘驱动器1414、可移动磁盘1418、可移动光盘1422相关联的硬盘的介质(例如,非暂时性介质),以及其他介质,诸如闪存卡、数字视频盘、随机存取存储器(ram)、只读存储器(rom)等。这样的计算机可读存储介质与通信介质不同并且不重叠(未包括通信介质)。通信介质将计算机可读指令、数据结构、程序模块或其他数据包括在调制数据信号(诸如载波)中。术语“调制数据信号”是指具有一个或多个其特征的信号,该特征以以便在信号中对信息进行编码的这样一种方式被设置或改变。作为示例而非限制,通信介质包括无线介质(诸如声学、rf、红外线和其他无线介质)以及有线媒体。示例实施例也针对这种通信介质。
137.如上所述,计算机程序和模块(包括应用程序1432和其他程序模块1434)可以存储在硬盘、磁盘、光盘、rom或ram上。这样的计算机程序也可以通过网络接口1450或串行端口接口1442被接收。这样的计算机程序在由应用执行或加载时,使计算机1400能够实现本文讨论的实施例的特征。因此,这样的计算机程序表示计算机1400的控制器。
138.示例实施例还针对包括存储在任何计算机可用介质上的软件(例如,计算机可读指令)的计算机程序产品。当在一个或多个数据处理装置中被执行时,这样的软件使数据处理装置如本文所述那样操作。实施例可以采用现在或将来已知的任何计算机可用或计算机可读介质。计算机可读介质的示例包括但不限于存储装置,诸如ram、硬盘驱动器、软盘、cd rom、dvd rom、zip磁盘、磁带、磁存储装置、光存储装置、基于mems的存储装置、基于纳米技
术的存储装置等。
139.将认识到,所公开的技术不限于任何特定的计算机或硬件类型。合适的计算机和硬件的特定细节是公知的并且不需要在本公开中详细阐述。
140.五、结论
141.尽管已经以特定于结构特征和/或动作的语言描述了主题,但是应当理解,在所附权利要求中定义的主题不一定限于上述特定特征或动作。相反,以上描述的特定特征和动作被公开为实现权利要求的示例,并且其他等同特征和动作旨在落入权利要求的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1