无论目标ECMAScript对象是否为只读对象都代理目标ECMAScript对象制造技术

技术编号:35503653 阅读:14 留言:0更新日期:2022-11-09 14:14
在此描述的技术能够无论目标ECMAScript对象是否为只读对象都代理目标ECMAScript对象。例如,当确定请求的目标ECMAScript对象包括至少一个只读属性时,请求的目标ECMAScript对象通过执行操作被代理,该操作包括:创建新的目标ECMAScript对象来替换请求的目标ECMAScript对象;以及将处理程序对象与新的目标ECMAScript对象相关联,以生成代理的目标ECMAScript对象,处理程序对象被配置为对请求的目标ECMAScript对象的属性执行相应的操作。的目标ECMAScript对象的属性执行相应的操作。的目标ECMAScript对象的属性执行相应的操作。

【技术实现步骤摘要】
【国外来华专利技术】无论目标ECMAScript对象是否为只读对象都代理目标ECMAScript对象

技术介绍

[0001]代理服务器是一种计算装置,它充当客户端装置(例如,其上的浏览器)与网络服务器之间的中介,以拦截客户端装置发起的向网络服务器请求资源的请求。代理服务器通常在将请求的或修改的资源传递给客户端装置之前分析和/或修改资源。
[0002]资源的一个示例是网页。网页包括多个元素。可以包括在网页中的元素的一个示例是ECMAScript对象。ECMAScript对象是符合ECMAScript标准的对象,该标准是由Ecma国际在ECMA

262和ISO/IEC 16262中开发和维护的脚本语言规范。ECMAScript的示例实现包括但不限于和
[0003]尽管ECMAScript第六版(又名ES6)引入了代理对象作为修改对ECMAScript对象执行的操作的一种方式,但ES6和ECMAScript的后续版本对代理对象的使用施加了限制,以维护安全性和浏览器性能。例如,不可配置的ECMAScript对象的属性(即,configurable=false(可配置=假))不能通过代理包装ECMAScript对象被更改。在另一个示例中,本机浏览器方法(又名函数),例如document.addEventListener,不能接受代理对象作为参数或“this(这个)”上下文。因此,代理对象传统上对于钩子(hooking)浏览器操作没有用处。

技术实现思路

[0004]这里描述了各种方法,其中包括无论目标ECMAScript对象是否是只读对象都代理目标ECMAScript对象。只读对象是具有至少一个只读属性的对象。只读属性是不能被重新定义的属性。例如,在中具有“configurable=false”特性的属性构成只读属性。重新定义属性会更改属性的定义和/或属性的值。例如,如果具有只读属性的只读对象被代理,则生成的代理对象中的“get(获取)”钩子(hook)必须返回与只读对象返回的属性相同的类型和值。将认识到,尝试重新定义只读对象的只读属性会导致关于只读对象的代理(例如,期间)的错误发生。例如,这样的错误可以导致异常被抛出。只读对象的一种示例类型是函数对象。函数对象是定义函数的对象。
[0005]在第一示例方法中,从ECMAScript引擎接收对目标ECMAScript对象的请求。目标ECMAScript对象包括多个属性。处理程序(handler)对象被定义,处理程序对象被配置为对目标ECMAScript对象的属性执行相应的操作。确定目标ECMAScript对象是否包括至少一个只读属性。如果属性不能被重新定义,则目标ECMAScript对象的每个属性是只读的。如果属性能够被重新定义,则目标ECMAScript对象的每个属性不是只读的。至少部分地基于目标ECMAScript对象是否包括至少一个只读属性,从多个代理技术中选择用于代理目标ECMAScript对象的代理技术。代理技术包括第一代理技术和第二代理技术。响应于请求目标ECMAScript对象的请求,目标ECMAScript对象使用选择的代理技术被代理,以生成代理的目标ECMAScript对象。代理目标ECMAScript对象包括第一操作或第二操作。第一操作包括创建新的目标ECMAScript对象以替换目标ECMAScript对象,以及至少将处理程序对象与
新的目标ECMAScript对象相关联,以及至少部分地基于包括至少一个只读属性的目标ECMAScript对象而使用第一代理技术来生成代理的目标ECMAScript对象。第二操作包括将处理程序对象应用于目标ECMAScript对象,以至少部分地基于未包括至少一个只读属性的目标ECMAScript对象而使用第二代理技术来生成代理的目标ECMAScript对象。
[0006]在第二示例方法中,确定请求的目标ECMAScript对象包括至少一个只读属性。如果属性不能被重新定义,则请求的目标ECMAScript对象的每个属性是只读的。如果属性能够被重新定义,则请求的目标ECMAScript对象的每个属性不是只读的。通过执行操作,至少部分地基于确定请求的目标ECMAScript对象包括至少一个只读属性来代理请求的目标ECMAScript对象,以生成代理的目标ECMAScript对象。这些操作包括创建新的目标ECMAScript对象来替换请求的目标ECMAScript对象。操作还包括将多个处理程序对象与新的目标ECMAScript对象相关联,多个处理程序对象被配置为对请求的目标ECMAScript对象的属性执行多个相应的操作,以生成代理的目标ECMAScript对象。
[0007]提供本
技术实现思路
以以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步被描述。本
技术实现思路
并非旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。此外,应注意,本专利技术不限于在具体实施方式和/或本文的其他部分中描述的特定实施例。这些实施例在本文中仅出于说明性目的而被呈现。基于本文包含的教导,其他实施例对于相关领域的技术人员将是显而易见的。
附图说明
[0008]并入本文并形成说明书一部分的附图说明了本专利技术的实施例,并且与描述一起进一步用于解释所涉及的原理并使相关领域的技术人员能够做出并使用公开的技术。
[0009]图1A是根据实施例的示例增强代理系统的框图。
[0010]图1B是根据实施例的图1A所示的包括正向代理服务器的增强代理系统的示例实现的框图。
[0011]图1C是根据实施例的图1A所示的包括反向代理服务器的增强代理系统的另一个示例实现的框图。
[0012]图2示出了根据实施例的代理目标ECMAScript对象的示例代码。
[0013]图3示出了根据实施例的尝试重新定义只读对象的只读属性的示例代码。
[0014]图4示出了根据实施例的定义函数对象以递归地包装文档对象的示例代码。
[0015]图5和图6示出了根据实施例的将只读对象区别于其他对象的示例代码。
[0016]图7示出了根据实施例的通过创建空对象来启动目标ECMAScript对象的代理的示例代码。
[0017]图8示出了根据实施例的尝试代理空函数对象(即,具有空目标ECMAScript对象的函数对象)的示例代码。
[0018]图9示出了根据实施例的通过创建空函数对象来启动代理函数对象的代理的示例代码。
[0019]图10示出了根据实施例的通过创建空函数对象和代理空函数对象的默认属性来启动函数对象的代理的示例代码。
[0020]图11描绘了根据实施例的用于无论目标ECMAScript对象是否是只读对象都代理
目标ECMAScript对象的示例方法的流程图。
[0021]图12描绘了根据实施例的用于无论属性对象是否是只读对象都代理每个属性对象的示例方法的流程图。
[0022]图13是根据实施例的图1所示的代理服务器的示例实现的框本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.一种无论目标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对象。2.根据权利要求1所述的系统,其中所述一个或多个处理器被配置为:定义多个处理程序对象,所述多个处理程序对象被配置为对所述目标ECMAScript对象的属性执行多个相应的操作,所述多个处理程序对象包括所述一个或多个处理程序对象;以及使用最初没有只读属性的所述新的目标ECMAScript对象来启动对所述目标ECMAScript对象的代理,并且将所述多个处理程序对象中的至少一部分添加到所述新的目标ECMAScript对象,以至少部分地基于所述目标ECMAScript对象包括至少一个只读属性而使用所述第一代理技术来生成所述代理的目标ECMAScript对象。3.根据权利要求2所述的系统,其中所述一个或多个处理器被配置为:使用最初没有属性的所述新的目标ECMAScript对象来启动对所述目标ECMAScript对象的代理,并且将所述多个处理程序对象添加到所述新的目标ECMAScript对象,以至少部分地基于所述目标ECMAScript对象包括至少一个只读属性而使用所述第一代理技术来生成所述代理的目标ECMAScript对象。
4.根据权利要求2所述的系统,其中所述一个或多个处理器被配置为基于空原型来创建所述新的目标ECMAScript对象。5.根据权利要求1所述的系统,其中所述目标ECMAScript对象是目标函数对象;其中所述新的目标ECMAScript对象是新的目标函数对象;并且其中所述一个或多个处理器被配置为:定义多个处理程序对象,所述多个处理程序对象被配置为对所述目标函数对象的属性执行多个相应的操作,所述多个处理程序对象包括所述一个或多个处理程序对象;以及使用最初具有一个或多个函数属性的所述新的目标函数对象来对启动所述目标函数对象的代理,将所述一个或多个处理程序对象应用于所述一个或多个函数属性,并且将所述多个处理程序对象添加到所述新的目标函数对象,以至少部分地基于所述目标函数对象包括至少一个只读属性而使用所述第一代理技术来生成所述代理的目标ECMAScript对象。6.根据权利要求1所述的系统,其中所述一个或多个处理器被配置为:通过将所述一个或多个处理程序对象绑定到所述目标ECMAScript对象来定义所述一个或多个处理程序对象。7.根据权利要求1所述的系统,其中分层对象结构包括多个分层级别,所述多个分层级别包括顶级以及低于所述顶级的一个或多个子级,其中所述目标ECMAScript对象是所述顶级中的所述分层对象结构的根,其中对象的每个属性由子级中的属性对象表示,所述子级紧接在包括相应的所述对象的分层级别之下;并且其中所述一个或多个处理器被配置为针对每个属性对象:确定所述属性对象是否包括至少一个只读属性;至少部分地基于所述属性对象是否包括至少一个只读属性,从所述多个代理技术中选择用于代理所述属性对象的代理技术,所述多个代理技术包括所述第一代理技术和所述第二代理技术,其中所述属性对象包括至少一个只读属性指示所述第一代理技术将从所述多个代理技术中被选择,其中所述属性对象未包括至少一个只读属性指示所述第二代理技术将从所述多个代理技术中被选择;以及使用选择的所述代理技术来代理所述属性对象,以生成代理的属性对象,所述代理所述属性对象包括:创建新的属性对象以替换所述属性对象,并且将至...

【专利技术属性】
技术研发人员:G
申请(专利权)人:微软技术许可有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1