动态加载脚本的制作方法

文档序号:6477003阅读:126来源:国知局
专利名称:动态加载脚本的制作方法
动态加载脚本
扭旦冃足
1.背景和相关技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力己改变人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其它电子设备以形成计算机系统和其它电子设
备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算组件上。
基于网络的通信的一种常见形式是在万维网("WWW")上交换电子消
息。万维网上的内容通常以客户机/服务器模型来访问。客户机计算机系统的
"web浏览器"发送访问由服务器计算机系统的"web服务器"提供的内容的请求(例如,通过将统一资源定位符("URL")输入到该web浏览器中)。如果web浏览器的用户被授权访问该内容,则web服务器通常将该内容提供给该web浏览器。在web环境中,内容和对内容的请求经常使用超文本传输协议("HTTP")来传输。基于web的内容可以在超文本标记语言("HTML")页面、样式表、图像、脚本等中提供。
例如,可以使用脚本来执行比仅使用HTML伪指令所允许的操作更复杂的操作。 一般而言,脚本是可以在web服务器执行以将内容添加到页面或可以被发送到web浏览器以供在web浏览器处执行来将内容添加到网页的可执行代码。脚本可以用诸如例如JavaSript、 VBScript、 ASP、 PHP、 Perl、或ASP .Net等脚本(编程)语言中来开发。可以维护页面的web服务器可以包括服务器侧和客户机侧脚本两者。服务器侧脚本可用于获得可由web服务器访问以包括在网页中的数据。客户机侧脚本可用于获取并呈现对客户机器唯一的数据,诸如例如本地时间和日期。然而,诸如例如向该web服务器或其它web服务器请求数据或额外脚本的更复杂的客户机侧脚本也是可能的。
6在web服务器接收对包括服务器侧脚本的网页的web浏览器请求时,该web服务器将该服务器侧脚本传送到合适的脚本引擎。该脚本引擎处理该脚本并返回代表该服务器侧脚本功能的对应HTML伪指令。该对应的HTML伪指令随后被注入到网页中以便返回给web浏览器(与任何客户机侧脚本一起)。
例如,如果服务器侧脚本被配置成査询并返回IO个数据库行,则该脚本引擎以HTML格式将这10个数据库行返回给web服务器。该web服务器随后将表示这10个数据库行的HTML注入到网页中的任何其它HTML伪指令和客户机侧脚本中。在所有服务器侧脚本被处理之后,因处理服务器侧脚本所得的HTML、其它HTML、以及任何客户机侧脚本被发回web浏览器。
客户机侧脚本可被嵌入在网页中或包括在单独的文件中。在客户机侧脚本被包括在外部文件中时,网页可以包括引用该脚本的脚本引用(例如,<scripttype="text/javascript" src="hello.js"></script>)。客户机侧脚本和脚本弓I用可以被成行地包括在发送到web浏览器的网页中。因此,随着web浏览器处理该网页,它可以遇到嵌入的客户机侧脚本以及对客户机侧脚本的脚本引用。
在遇到嵌入的脚本时,web浏览器可以找出合适的脚本引擎来处理该脚本。在遇到客户机侧脚本引用时,web浏览器可以将该所引用的脚本加载(例如,在该脚本的副本已经被高速缓存时)到脚本引擎以供处理或者它可以从web服务器请求该脚本。该web服务器可以随后将该脚本返回给web浏览器且该web浏览器可以将该脚本加载(且可能也高速缓存)到脚本引擎以供处理。
web浏览器通常假设之后在web中遇到的任何脚本取决于之前在网页中所遇到的脚本。因此,web浏览器通常以在网页中遇到脚本的次序依次加载脚本。然而在许多网页中,后续遇到的脚本不依赖任何之前遇到的脚本。因此,不幸且尤其对具有大量客户机侧脚本的网页不幸的是,依次加载是相对低效的。
此外,在开发网页时,开发者可以选择包括之前开发的客户机侧脚本以利用客户机侧功能。在某种程度上开发者可能假设之前的客户机侧脚本如预期般工作。或者,开发者可能缺乏彻底地测试任何之前开发的客户机侧脚本的时间、愿望、或专业知识。然而, 一个或多个客户机侧脚本可能不能在网页被部署时加载或运行。不幸的是,典型web浏览器(以及其中的脚本引擎)向网页开发者提供回极少(如果有的话)例如指示客户机侧脚本失效的环境的有用上下文。 因此,网页开发者可能被要求基于涉及客户机侧脚本失效的信息的不完整记录 来调试该网页。
简要概述
本发明涉及用于动态地加载脚本的方法、系统和计算机程序产品。web浏 览器响应于来自该web浏览器的对web网页的请求从web服务器接收该网页。 该网页包括对脚本加载器的引用。该脚本加载器被配置成在执行时创建用于将 其它脚本引用排队的数据结构。该脚本加载器还被配置成在接收来自web浏览 器的指示时根据覆盖该web浏览器的默认脚本加载行为的脚本加载规则来动 态地加载网页中所引用的脚本。
web浏览器执行脚本加载器。脚本加载器创建用于将脚本引用排队的数据 结构。web浏览器处理网页以在该数据结构中将包括在网页中的任何脚本引用 排队。脚本加载器用包括网页中的脚本引用来填充队列。web浏览器检测在将 包括在网页中的任何脚本引用排队之后没有其它脚本引用被包括在该网页中。
web浏览器向脚本加载器指示没有其它脚本引用被包括在网页中。脚本加 载器从web浏览器接收没有其它脚本引用被包括在指定网页中的指示。脚本加 载器使得由排队的脚本引用所引用的脚本根据覆盖web浏览器的默认脚本加 载行为的脚本加载规则来加载。web浏览器将任何相关脚本结果包括在网页的 呈现中。
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的 一些概念。该概述不旨在标识所要求保护的主题的关键特征或必要特征,也不 旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其部分根据本描述将是 显而易见的,或可通过对本发明的实践获知。本发明的特征和优点可通过在所 附权利要求书中特别指出的手段和组合来实现和获得。本发明的这些和其他特 征将通过以下描述和所附权利要求书而变得更加完全明显,或可通过对下文中 所述的本发明的实践来获知。
附图简述为了描述可获得本发明的上述和其它优点和特征的方法,将通过引用附图 中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可 以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限 制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中

图1示出了便于动态地加载脚本的示例计算机体系结构。 图2示出了用于动态地加载脚本的示例方法的流程图。
详细描述
本发明涉及用于动态地加载脚本的方法、系统和计算机程序产品。web浏 览器响应于来自该web浏览器的对网页的请求从web服务器接收该网页。该 网页包括对脚本加载器的引用。该脚本加载器被配置成在执行时创建用于将其 它脚本引用排队的数据结构。该脚本加载器还被配置成在接收来自web浏览器 的指示时根据覆盖该web浏览器的默认脚本加载行为的脚本加载规则来动态 地加载网页中所引用的脚本。
web浏览器执行脚本加载器。脚本加载器创建用于将脚本引用排队的数据 结构。web浏览器处理web网页以在该数据结构中将包括在网页中的任何脚本 引用排队。脚本加载器用包括在网页中的脚本引用来填充队列。web浏览器检 测在将包括在网页中的任何脚本引用排队之后没有其它脚本引用被包括在该 网页中。
web浏览器向脚本加载器指示没有其它脚本引用被包括在该网页中。脚本 加载器从web浏览器接收没有其它脚本引用被包括在指定网页中的指示。脚本 加载器使得由排队的脚本引用所引用的脚本根据覆盖web浏览器的默认脚本 加载行为的脚本加载规则来加载。web浏览器将任何相关脚本结果包括在网页 的呈现中。
本发明的各实施例可以包括含有计算机硬件的专用或通用计算机,这将在 以下做出进一步讨论。本发明的范围内的各个实施例还包括用于承载或其上储 存有计算机可执行指令或数据结构的计算机可读介质。这样的计算机可读介质 可以是可由通用或专用计算机访问的任何可用介质。作为示例而非限制,计算 机可读介质可包括物理(或可记录类型的)计算机可读存储介质,诸如RAM、ROM、 EEPROM、 CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、 或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由 通用或专用计算机访问的任何其它介质。
在本说明书和所附权利要求书中,"网络"被定义为允许在计算机系统和/ 或模块之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信 连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该 计算机将该连接适当地视为计算机可读介质。因此,作为示例而非限制,计算 机可读介质还可包括可用于承载或存储计算机可执行指令或数据结构形式的 所需程序代码装置并可由通用或专用计算机访问的网络或数据链路。
计算机可执行指令包括例如,使通用计算机、专用计算机、或专用处理设
备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进 制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/ 或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的 主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的 示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置 的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、 膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或 可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、 寻呼机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、 无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机 系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模 块可以位于本地和远程存储器存储设备中。
图1示出了便于动态地加载脚本的示例计算机体系结构100。如图所示, 计算机体系结构100包括web浏览器101、 web服务器102、以及网络103。 web浏览器101和web服务器102可以被连接到诸如例如局域网("LAN")、 广域网("WAN")或甚至因特网等网络103。因此,web浏览器101和web 服务器102的组件可以从连接到网络103的其它组件接收数据并向这些其它组 件发送数据。因此,这些组件可以创建消息相关数据并通过网络交换消息相关
10数据(例如,网际协议("IP")数据报和利用IP数据报的其它更高层协议,诸
如传输控制协议("TCP")、超文本传输协议("HTTP")、简单邮件传输协议 ("SMTP")等)。例如,各组件可交换HTTP请求与响应以及包含web服务 相关数据的简单对象访问协议("SOAP")封装。
一般而言,web浏览器101被配置成请求(例如,经由到指定URL的HTTP 消息)并呈现来自诸如例如web服务器104等可经由网络103访问的web服 务器的基于web的内容。基于web的内容可以包括文本数据、图像数据、音 频/视频数据、可执行代码(例如,脚本)等。
一般而言,web服务器102被配置成接收对基于web的内容的请求(例如, 到指定URL的HTTP消息)并将所请求的基于web的内容返回给请求的web 浏览器。在web服务器102接收请求时,它可以标识对应于该请求的服务器侧 页面(例如,基于包含在该请求中的URL将该请求分派到合适的进程)。web 服务器106可以随后加载所标识的服务器侧页面。
在服务器侧页面包括服务器侧脚本引用时,web服务器106可以向服务器 侧脚本处理器发送所引用的服务器侧脚本(例如,ASP.Net指令)以供处理。 该脚本处理器处理服务器侧脚本并将任何对应结果返回给web服务器102。web 服务器102可以随后将这些结果(可能在附加的格式化之后)与其它内容和任 何客户机侧脚本引用一起包括在网页中。web服务器102可以随后将该网页返 回给请求的web浏览器。
因此,例如,web浏览器101可以向web服务器101发送请求111 (HTTP GET)(通过利用web服务器102的合适的URL) 。 web服务器102可以处理 请求lll并生成/获得对应的内容(静态的或通过服务器侧脚本动态地访问)。 对应的内容和任何客户机侧脚本引用可以在网页112中返回给web浏览器101 (例如,包含在HTTP消息中)。客户机侧脚本引用可以引用存储在web服务 器102处的诸如例如大容量存储设备或组件的目录结构(例如,动态链接库 ("DLL"))等各种不同位置中(例如,脚本122中)的脚本,或可以引用 在其它web服务器处的脚本。web服务器102可以随后响应于请求111将网页 112返回给web浏览器101。
在web浏览器101接收网页时,它可以将该网页的各部分分配给被配置成处理该网页的各部分的模块。因此,在web浏览器101接收网页112时,诸 如例如静态内容113等静态内容可以被分配给呈现模块106。任何脚本(例如, JavaScript、 VB脚本等)或诸如例如脚本引用108R等脚本引用可以被分配给 诸如例如脚本处理器107等合适的脚本处理器。之前在web浏览器101处执行 的脚本可被存储在诸如例如高速缓存158等大容量存储109处。因此,响应于 接收客户机侧脚本引用,web浏览器101可以经由网络103从web服务器(可 以是或可以不是发送该客户机侧脚本引用的web服务器)或从高速缓存158获 得对应的客户机侧脚本。
脚本处理器107可以执行脚本并将任何所得内容(如果有的话)返回给呈 现模块106。例如,脚本处理器107可以将结果154返回给呈现模块106。呈 现模块106可以在用户界面104处呈现数据。例如,呈现模块106可以在用户 界面104处呈现页面数据156。呈现模块106可以随着其接收到内容来呈现内 容,使得网页的某些部分(例如,静态内容)在网页的其它部分(例如,脚本 结果)之前被呈现。
图2示出了用于动态地加载脚本的示例方法200的流程图。方法200将参 考计算机体系结构100中的组件和数据来描述。
方法200包括从web服务器接收网页的动作,该网页是响应于来自web 浏览器的对网页的请求发送到web浏览器的(动作200)。该网页包括对被配 置成在执行时创建用于将其它脚本引用排队的数据结构的脚本加载器的引用。 该脚本加载器还被配置成在接收来自web浏览器的指示时根据覆盖该web浏 览器的默认脚本加载行为的脚本加载规则来动态地加载网页中所引用的脚本。
例如,web浏览器101可以响应于请求111来接收网页112。网页112包 括指向脚本加载器脚本108S的脚本加载器引用108R。脚本加载器脚本108S 被配置成在执行时创建用于将网页112中的诸如例如124R、 134R和144R等 其它脚本引用排队的数据结构。脚本加载器脚本108S还被配置成在接收来自 web浏览器101的指示时根据脚本加载规则118动态地加载网页112中所引用 的脚本。脚本加载规则118可以覆盖web浏览器101的默认脚本加载行为。
脚本加载规则118可以包括用于在web浏览器101处加载脚本的逻辑和 策略。因此,脚本加载器108可以将脚本加载规则118应用于队列116中的客户机侧脚本引用以创建脚本加载次序153。脚本加载规则逻辑可以包括用于枚举包括在队列116中的客户机侧脚本引用的算法。例如,脚本加载规则118可 以枚举引用124R、 134R、 144R等。从所枚举的客户机侧脚本引用中,其它脚本加载规则逻辑可以包括标识对 应的所引用的脚本对彼此和/或对其它外部资源的依赖性的算法。例如,脚本加 载器108可以执行可以确定脚本134S依赖于脚本124S且脚本144S不依赖于 任何其它脚本的脚本加载规则。从所枚举的客户机侧脚本引用中,其它脚本加 载规则逻辑可以包括标识包括跨域请求的脚本的算法。例如,脚本加载器108 可以执行脚本加载规则以确定在执行所引用的脚本时要发生多少对除了 web 服务器102以外的服务器的请求。其它脚本加载规则逻辑可以包括用于标识所引用的脚本的其它特征和/或 所引用的脚本之间的关系的算法。脚本加载规则逻辑还是可扩展的,使得开发 者可以开发他们自己的脚本加载规则逻辑以标识web网页中的所引用的脚本 的特征和/或所引用的脚本之间的关系。或者,开发者可以修改现有脚本加载规 则逻辑以定制用于指定目的的脚本加载规则逻辑。脚本加载规则策略指示如何基于所枚举的脚本的特征和/或所枚举的脚本 之间的关系来加载所枚举的所引用的脚本。脚本加载规则策略可被应用于从队 列116中所枚举的脚本引用以采用指定次序来加载对应脚本。脚本加载次序可 以基于所标识的脚本依赖性以及其它脚本关系和特征来指示。在某些实施例中,应用脚本加载规则策略以便按不同于所引用的脚本在网 页中出现的次序的指定次序来加载所枚举的所引用的脚本(无序加载)。例如, 脚本引用124R、 134R和144R可以按此次序被包括在网页112中。艮口,弓l用 124R距网页112的顶部更近而引用144R距网页112的底部更近。然而,脚本 加载规则策略可以指示即使引用124R在引用134R之前被接收到,脚本134S 仍然将在脚本124S和144S之前被加载。此外,脚本加载规则策略可以指示即 使引用124R在引用144R之前被接收到,脚本144S仍然将在脚本124S之前 被加载。在其它实施例中,应用脚本加载规则策略以并行地加载所枚举的所引用的 脚本(并行加载)。例如,脚本加载规则策略可以指示因为脚本124S不依赖于脚本144S且脚本144S不依赖于脚本124S,所以脚本124S和144S将被并行地加载。在其它实施例中,应用脚本加载规则策略以便按限制对指定域的并发跨域 请求的数量的方式来加载所枚举的脚本。例如,脚本加载规则策略可以指示脚 本将以将对除了 web服务器102以外的web服务器的并发跨域请求的数量限 制为指定阈值的次序被加载。脚本加载规则策略还可以是可扩展的,使得开发者可以开发他们自己的脚 本加载规则策略来以指定方式加载脚本。或者,开发者可以修改现有脚本加载 规则策略以定制用于指定目的的脚本加载规则策略。例如,脚本加载规则策略 可以指示将对给定已知依赖性集并行地加载各脚本,而不是顺序地加载脚本。脚本加载器108还可以在公式化脚本加载次序时考虑单独的浏览器特征 以在浏览器环境内适当地加载脚本。例如,脚本加载器108可以在公式化脚本 加载次序153时考虑浏览器类型151 (且可以意识到浏览器类型151的脚本加 载特征)。在某些实施例中,可以将脚本加载规则118硬编码到脚本加载器108中。 因此,为了在这些实施例中定制脚本加载规则118,开发者可以修改脚本加载 器108的源代码以定制用于指定目的的脚本加载规则118 (并因此还定制脚本 加载108)。在其它实施例中,脚本加载器108外部地访问脚本加载规则118。 因此,为了在这些其它实施例中定制脚本加载规则118,开发者可以修改该外 部可访问脚本加载规则118以定制用于指定目的的脚本加载规则118。脚本加载器108可以提供用于与浏览器101和脚本处理器107接口的API。 方法200包括执行该脚本加载器以创建用于将脚本引用排队的数据结构 的动作(动作202)。例如,脚本处理器107可以加载脚本加载器108以创建 队列116。可以将脚本加载器引用108R内联地包括于邻近(或在)网页112 的顶部处。因此,脚本加载器引用108R是所遇到的第一个引用的可能性增加。 由于web浏览器101的默认行为(例如,顺序地加载脚本),脚本处理器107 可以在处理任何其它脚本或脚本引用之前处理脚本加载器引用108R。因此, 处理脚本引用108S以加载脚本加载器108本质上引导了覆盖web浏览器101 的默认脚本加载行为的脚本加载行为。14方法200包括创建被配置成存储脚本引用的队列的动作(动作203)。例 如,脚本加载器108可以创建队列116以在网页112中存储客户机侧脚本引用。 方法200包括处理网页以在数据结构中将包括在网页中的任何脚本引用排队的 动作(动作204)以及用包括在指定网页中的脚本引用来填充队列的动作(动 作205)。例如,web浏览器101和脚本加载器108可以互操作以处理网页112 并将队列引用124R、 134R和144R存储在队列116中。
方法200包括检测在数据结构中将包括在网页中的任何脚本引用排队之 后没有其它脚本引用被包括在网页中的动作(动作206)。例如,web浏览器 101可以检测在引用124R、134R和144R被排入队列116之后没有其它脚本引 用被包括在网页112中。
方法200包括向脚本加载器指示没有其它脚本引用被包括在网页中的动 作(动作207)。指示没有其它引用被包括使得脚本加载器根据覆盖web浏览 器的默认脚本加载行为的脚本加载规则来动态地加载对应于排队的脚本引用 的脚本。例如,在来自网页112的所有引用已经被排入队列116时,web浏览 器101可以向脚本加载器107发送队列处理指示符152。队列处理指示符152 可以使得脚本加载器108根据脚本加载规则118来动态地加载排入队列116的 脚本。
方法200包括从web浏览器接收没有其它脚本引用被包括在指定网页中 的指示的动作(动作208)。例如,脚本加载器108可以从web浏览器101接 收队列处理指示符152。方法200包括使得由排队的脚本引用所引用的脚本根 据覆盖web浏览器的默认脚本加载行为的脚本加载规则来加载的动作(动作 209)。例如,脚本加载器108可以使得脚本124S、 134S和144S以及网页112 中的其它所引用的脚本根据覆盖web浏览器101的默认脚本加载行为的脚本加 载规则118来加载。
脚本加载次序153共同表示用于加载网页112中所引用的脚本的次序。在 某些实施例中,脚本处理器和脚本加载器108进行通信以协调各脚本的实际加 载。例如,脚本加载器108可以向脚本处理器107发送加载一个或多个脚本的 命令。在加载一个或多个脚本时,脚本处理器107可以指示将一个或多个脚本 加载到脚本加载器108。脚本加载器108随后可以发送将另一个或多个脚本加载到脚本加载器108的另一命令。在加载该另一个或多个脚本时,脚本处理器
107可以指示将该另一个或多个脚本加载到脚本加载器108。类似的机制可以 发生,直到网页112中的脚本引用被加载。
因此,脚本加载器108和脚本处理器107可以互操作来以与在网页112 中遇到的次序不同的次序来加载脚本、并行地加载多个脚本、以限制并发跨域 请求的方式加载脚本等。脚本加载器108还可以使得脚本以不违反web浏览器 101的脚本加载特征(基于浏览器类型151)的方式被加载。
某些已加载脚本可以生成内容以供包括在网页112中。结果154共同表示 从web浏览器101处执行的客户机侧脚本返回的任何内容。脚本处理器107可 以向呈现模块106发送结果154。方法200包括将任何相关脚本结果包括在网 页的呈现中的动作(动作210)。例如,呈现模块106可以将结果154包括在 页面数据156 (表示网页112的数据)中。呈现模块106可以在用户界面104 处呈现页面数据156。
因此,本发明的各实施例方便了在与客户机侧脚本加载相关联的初始化 (init)并加载(load)事件之前的时刻加载脚本。可以将脚本加载器引用返回给 web浏览器以便于在不同情况下的此行为。
在一个实施例中,在对web应用程序的初始请求是HTTP GET时,将脚 本加载器引用返回给web浏览器。脚本加载器引用可以被内联地包括在返回的 网页的顶部,诸如例如
<script src= "ScriptLoader.js,, />
为web应用程序创建并注册脚本加载器,诸如例如 Sys.Application.set—scriptLoader( new Sys.ScriptLoader());

this.一loader.add—allScriptsLoaded ( this.一allScriptsLoadedDelegate);
将包括引用、内联脚本、以及处理程序的脚本引用排队到脚本加载器。如 前所述,脚本可以从多个不同位置加载。因此,脚本可以从自定义库加载,诸
如例如Sypplication.queueScriptReference(7 CustomScript.js '); Sys.Application.queueScriptReference( ("Sys.Application.add—init ( $create(Custom.UI.Control, {}, {}, {}, $get('f))
Sys.Application.initialize();
随后可以指示该注册脚本加载来加载它已经排队的脚本引用,诸如例如
Sys.Application.get—scriptLoader().set—scriptLoadTimeOut(n) Sys.Application.get—scriptLoader().loadScripts();
该脚本加载器可以在所有脚本已经被加载时指示web应用程序。
在另一实施例中,在对web应用程序的异步HTTP POST中将脚本加载器 引用返回给web浏览器。在此其它实施例中,脚本加载可能已经被创建了且一 请求管理器挂钩到所加载的脚本上的事件。因此可以发生注册,诸如例如
Sys.Application.get一scriptLoaderO .
add—allScriptsLoaded(PRM.一allScriptsLoadedDelegate);
随后可以使用内部脚本加载器来将脚本引用排队。这包括脚本引用、内联
脚本、以及任何处理程序。因此,脚本可以从自定义库加载,诸如例如
Sys.Application.queueScriptReference('/ CustomScript.js '); Sys.Application.queueScriptReference( ("Sys.Application.add—init ( $create(Custom.UI.Control, {}, {}, {}, $get('f))
);
指示已注册的脚本加载器加载它的脚本引用,诸如例如
Sys.Application.get—scriptLoader().loadScripts();
在本实施例以及其它之前所述的实施例中,页面或组件开发者能够通过脚 本加载器的API和声明性句法来定义在web浏览器处加载脚本的行为。脚本管 理器随后生成使用客户机侧脚本处理器的输出。
其它脚本相关功能也可以被包括在脚本加载器中。例如,脚本加载器可被 配置成将任何脚本加载错误写入日志文件。脚本加载错误可以包括超时、依 赖性错误、资源错误等。关于脚本加载错误的相关上下文信息也可以在发生脚本加载错误发生时写入日志文件。日志文件可被存储在可由页面或组件开发者 访问的位置。例如,在检测到web浏览器101处的脚本加载错误时,脚本加载 器108可以将日志157存储到网络103内的网络位置。开发者可以从该网络位 置访问日志157以协助测试和/或调试脚本加载器108以及其它脚本。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所述实施例 在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附 权利要求书而非前述描述指示。落入权利要求书的等效方式的含义和范围内的 所有改变应被权利要求书的范围涵盖。
权利要求
1.一种在连接到网络的计算机系统处的用于在web浏览器处动态地加载脚本的方法,所述计算机系统包括被配置成在所述计算机系统处呈现网页的所述web浏览器,所述方法包括从web服务器接收网页的动作,所述网页响应于来自所述web浏览器的对所述网页的请求被发送到所述web浏览器,所述网页包括对脚本加载器的引用,所述脚本加载器被配置成在执行时创建用于将其它脚本引用排队的数据结构,所述脚本加载器还被配置成在接收到来自所述web浏览器的指示时根据覆盖所述web浏览器的默认脚本加载行为的脚本加载规则来动态地加载所述网页中所引用的脚本;执行所述脚本加载器来创建用于将脚本引用排队的数据结构的动作;处理所述网页以在所述数据结构中将包括在所述网页中的任何脚本引用排队的动作;检测在所述数据结构中将包括在所述网页中的任何脚本引用排队之后没有其它脚本引用被包括在所述网页中的动作;向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器根据覆盖所述web浏览器的默认脚本加载行为的脚本加载规则来动态地加载对应于所排队的脚本引用的脚本的动作;以及将任何相关脚本结果包括在所述网页的呈现中的动作。
2. 如权利要求1所述的方法,其特征在于,还包括在从所述web服务器接收所述网页之前向所述web服务器发送HTTPGET的动作。
3. 如权利要求1所述的方法,其特征在于,还包括向所述web服务器发送异步HTTP POST的动作。
4. 如权利要求1所述的方法,其特征在于,从web服务器接收网页的动作包括接收在所述网页的顶部处包括脚本加载器引用的所述网页。
5. 如权利要求1所述的方法,其特征在于,向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器动态地加载脚本的动作包括向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器以与在所述网页中遇到脚本的次序不同的次序来加载脚本的动作。
6. 如权利要求1所述的方法,其特征在于,向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器动态地加载脚本的动作包括向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器并行地加载多个脚本的动作。
7. 如权利要求1所述的方法,其特征在于,向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器动态地加载脚本的动作包括向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器以限制对任何给定域的请求的数量的方式来加载脚本的动作。
8. 如权利要求1所述的方法,其特征在于,向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器动态地加载脚本的动作包括向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所述脚本加载器以覆盖所述web浏览器的默认加载行为的方式来加载脚本的动作。
9. 一种在连接到网络的计算机系统处的方法,所述计算机系统包括被配置成在所述计算机系统处呈现网页的web浏览器和被配置成动态地加载网页中所引用的脚本以覆盖所述web浏览器的默认脚本加载行为的脚本加载器,所述方法包括创建被配置成存储脚本引用的队列的动作;用包括在指定网页中的脚本引用来填充所述队列的动作;从所述web浏览器接收没有其它脚本引用被包括在所述指定网页中的指示的动作;以及使得由所排队的脚本引用所引用的脚本根据覆盖所述web浏览器的默认脚本加载行为的脚本加载规则来加载的动作。
10. 如权利要求9所述的方法,其特征在于,还包括在使得所述脚本被加载之前枚举所述队列中的脚本引用以建立脚本引用列表的动作。
11. 如权利要求10所述的方法,其特征在于,还包括-标识对应于包含在所述脚本引用列表中的脚本引用的脚本的动作;以及 确定所标识的脚本中的任一个是否彼此相关的动作。
12. 如权利要求IO所述的方法,其特征在于,还包括 标识至少一个脚本依赖于至少一个其它脚本的动作。
13. 如权利要求10所述的方法,其特征在于,还包括 标识包括跨域请求的脚本的动作。
14. 如权利要求9所述的方法,其特征在于,所述使得脚本根据脚本加 载规则来加载的动作包括以与在所述网页中遇到脚本的次序不同的次序来加 载脚本的动作。
15. 如权利要求9所述的方法,其特征在于,所述使得脚本根据脚本加载规则来加载的动作包括并行地加载多个脚本的动作。
16. 如权利要求9所述的方法,其特征在于,所述使得脚本根据脚本加载规则来加载的动作包括以限制对任何给定域的并发请求的数量的方式来加 载脚本的动作。
17. 如权利要求9所述的方法,其特征在于,所述使得脚本根据脚本加 载规则来加载的动作包括以覆盖所述web浏览器的顺序加载行为的方式来加 载脚本的动作。
18. 如权利要求9所述的方法,其特征在于,所述使得脚本根据脚本加 载规则来加载的动作包括基于所引用的脚本的特征和所引用的脚本之间的关 系来加载脚本的动作。
19. 一种计算机系统,所述计算机系统包括 一个或多个处理器;系统存储器;其上存储有表示web浏览器的计算机可执行指令的一个或多个计算机可 读介质,所述计算机可执行指令在于所述处理器之一处被执行时使得所述web 浏览器被配置成执行以下动作从web服务器接收网页,所述网页响应于来自所述web浏览器的对所述 网页的请求被发送到所述web浏览器,所述网页包括对表示脚本加载器的计算 机可执行指令的引用,所述脚本加载器被配置成在执行时创建用于将其它脚本引用排队的数据结构,所述脚本加载器还被配置成在接收到来自所述web浏览 器的指示时根据覆盖所述web浏览器的默认脚本加载行为的脚本加载规则来 动态地加载所述网页中所引用的脚本;执行所述脚本加载器的计算机可执行指令来创建用于将脚本引用排队的 数据结构;处理所述网页以在所述数据结构中将包括在所述网页中的任何脚本引用 排队;检测在所述数据结构中将包括在所述网页中的任何脚本引用排队之后没 有其它脚本弓I用被包括在所述网页中;向所述脚本加载器指示没有其它脚本引用被包括在所述网页中以使得所 述脚本加载器根据覆盖所述web浏览器的默认脚本加载行为的脚本加载规则 来动态地加载对应于所排队的脚本引用的脚本;以及在执行了表示所述脚本加载器的计算机可执行指令后,将表示所述脚本加 载器的可执行指令存储到系统存储器中,所述表示脚本加载器的可执行指令在 于所述处理器之一处被执行时,使得所述脚本加载器被配置成执行以下动作创建被配置成存储脚本引用的队列;用包括在指定网页中的脚本引用来填充所述队列;从所述web浏览器接收没有其它脚本引用被包括在所述指定网页中的指 示;以及使得由所排队的脚本引用所引用的脚本根据覆盖所述web浏览器的默认 脚本加载行为的脚本加载规则来加载。
20.如权利要求19所述的计算机系统,其特征在于,基于所引用的脚 本的特征和所引用的脚本之间的关系来根据覆盖所述web浏览器的默认顺序 脚本加载行为的脚本加载规则来加载脚本。
全文摘要
本发明涉及用于动态地加载脚本的方法、系统和计算机程序产品。网页可以包括对控制web浏览器处的其它脚本的加载的脚本加载器的引用。脚本加载器可以根据覆盖web浏览器的默认脚本加载行为的脚本加载规则来加载脚本。脚本加载规则可以使得脚本以与在网页中遇到的次序不同的次序来加载、并行加载、以限制跨域请求的方式来加载等。脚本加载规则是可配置的,使得开发者可以创建定制的脚本加载行为。
文档编号G06F17/00GK101669114SQ200880013770
公开日2010年3月10日 申请日期2008年3月26日 优先权日2007年4月27日
发明者B·C·勒鲁瓦, D·V·里德, E·J·利普顿, M·E·吉布斯, M·J·哈德, N·科塔里, S·卡尔维特 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1