受限计算机环境中的交叉源通信的制作方法

文档序号:17745201发布日期:2019-05-24 20:35阅读:239来源:国知局
受限计算机环境中的交叉源通信的制作方法

本文总体上涉及用于在计算系统上的分离的执行上下文之间(诸如web浏览器中的不同窗口之间)通信的技术。



背景技术:

服务器和计算设备等的硬件和软件能力的进步导致了越来越复杂的网页、应用界面和其他电子文档。例如,一些网页整合了来自多个源的内容以减少用户反复地导航到其他网站并返回原始网页的需要。举例来说,网页可以包括为网页提供主要内容的顶级文档和在顶级文档中嵌入其他内容(诸如来自地图服务器或导航服务器的内容)的一个或多个内嵌框架(iframe)。在一些情况下,嵌入的文档从与其顶级文档从中获得的域不同的域获得,因而被称为具有不同的源。

来自不同的源的文档可能对计算系统造成威胁。例如,来自第一源的文档可能携带被设计为危害来自第二源的文档(例如,通过在其他文档中注入进一步的恶意代码,通过检测其他文档的文档对象模型(dom)或对其进行未授权的改变,从其他文档爬取个人信息,或监视与其他文档的用户交互)的恶意程序。因此,web浏览器和公共地执行来自不同源的文档的其他应用已经实施同源策略,其限制许多形式的交叉源文档交互。例如,浏览器可以阻止来自第一域的显示在第一窗口中的网页访问与来自第二域的显示在第二窗口中的另一网页关联的数据。开发了同源策略以保护来自不同源的数据的完整性和保密性。



技术实现要素:

本文档描述了用于在交叉源执行上下文之间提供安全通信信道的基于计算机的系统、方法、设备和其他技术。在一些实施方式中,交叉源执行上下文之间的双向通信信道可以用于为顶级文档(诸如主要网页)和包含显示在嵌入在主要网页中的一个或多个iframe中的次要内容的一个或多个嵌入的文档创建统一用户界面。

本文公开主题的一些实施方式包括一种用于在计算系统上的第一执行上下文和计算系统上的第二执行上下文之间传送数据(communicatedata)的计算机实现的方法。第一执行上下文可以执行来自第一源的内容,第二执行上下文可以执行来自与第一源不同的第二源的内容,并且作为计算系统实施的同源策略的结果,第一执行上下文和第二执行上下文中的每一个可以被限制访问另一个的数据。所述方法可以包括:在第一执行上下文和第二执行上下文之间建立双向通信信道,包括:在第一执行上下文中接收从第二执行上下文发送的初始发现消息;在第一执行上下文中并且基于从第二执行上下文发送的初始发现消息确定第二执行上下文的标识符;使用第二执行上下文的标识符建立双向通信信道的第一单向子信道,所述第一单向子信道被配置为将消息从第一执行上下文携带到第二执行上下文;在第二执行上下文中接收通过第一单向子信道从第一执行上下文发送的连接广播消息;在第二执行上下文中并且基于通过第一单向子信道从第一执行上下文发送的连接广播消息确定第一执行上下文的标识符;和使用第一执行上下文的标识符建立双向通信信道的第二单向子信道,所述第二单向子信道被配置为将消息从第二执行上下文携带到第一执行上下文;以及通过双向通信信道在第一执行上下文和第二执行上下文之间传送消息。

这些和其他实施方式可以可选地包括一个或多个下述特征。

按照同源策略,计算系统可以响应于识别第一源和第二源的传输协议、地址或端口号中的至少一个彼此不同来将第二源分类为与第一源不同。

第一执行上下文可以包括被配置为呈现来自第一源的内容的第一窗口对象,其中,第二执行上下文包括被配置为呈现来自第二源的内容的第二窗口对象。

呈现在第一窗口对象中的内容可以包括由在与所述第一源关联的第一域处的一个或多个服务器托管的第一网页。呈现在第二窗口对象中的内容可以包括由在与第二源关联的第二域处的一个或多个服务器托管的第二网页。第二窗口对象可以是嵌入在所述第一网页中的内嵌框架(iframe)。

操作还可以包括:用计算系统的web浏览应用生成第一执行上下文和第二执行上下文,其中,第一单向子信道被配置为使用web浏览应用的postmessage应用编程接口(api)来将消息从第一执行上下文携带到所述第二执行上下文,并且其中,第二单向子信道被配置为使用web浏览应用的postmessageapi来将消息从第二执行上下文携带到第一执行上下文。

在计算系统上的执行上下文的层次结构中,第二执行上下文可以是第一执行上下文的后代。在第一执行上下文中并且基于从第二执行上下文发送的初始发现消息确定第二执行上下文的标识符可以包括:访问初始发现消息的源标识符字段的值。

在建立第一单向子信道和第二单向子信道之后,可以通过以下动作来验证所述双向通信信道:将第一信道连接消息从第二执行上下文发送到第一执行上下文;在第一执行上下文中接收从第二执行上下文发送的第一信道连接消息;响应于接收第一信道连接消息,在第一执行上下文处将双向通信信道标记为处于连接状态;将第二信道连接消息从第一执行上下文发送到第二执行上下文;在第二执行上下文中接收从第一执行上下文发送的第二信道连接消息;以及响应于接收第二信道连接消息,在第二执行上下文处将双向通信信道标记为处于连接状态。

第一执行上下文中的一个或多个服务可以被配置为响应于识别第一单向子信道处于连接状态而使用双向通信信道将消息从第一执行上下文携带到第二执行上下文。第一执行上下文中的一个或多个服务可以被配置为响应于识别第一单向子信道处于未连接状态而执行替代动作而不是使用双向通信信道将消息从第一执行上下文携带到第二执行上下文。

操作还可以包括:通过检查在计算系统上的执行上下文的层次结构中,第二执行上下文是否是第一执行上下文的后代,在第一执行上下文中确定第一执行上下文是否是来自第二执行上下文的初始发现消息的目标;以及响应于识别第二执行上下文是第一执行上下文的后代:(i)确定第一执行上下文是来自第二执行上下文的初始发现消息的目标并且继续建立第一单向子信道,以及(ii)选择以在第一执行上下文和第二执行上下文之间建立第一单向子信道。

操作还可以包括:在第一执行上下文中接收从执行来自不是第一源的源的内容的第三执行上下文发送的第二初始发现消息,其中,作为计算系统实施的同源策略的结果,第一执行上下文和第三执行上下文中的每一个被限制访问另一个的数据;通过检查在计算系统上的执行上下文的层次结构中,第三执行上下文是否是第一执行上下文的后代,在第一执行上下文中确定第一执行上下文是否是来自第三执行上下文的第二初始发现消息的目标;以及响应于识别第三执行上下文不是第一执行上下文的后代,丢弃第二初始发现消息以不在第一执行上下文和第三执行上下文之间建立通信信道。

操作还可以包括:在第一执行上下文中识别来自第二执行上下文的初始发现消息包含第一令牌,所述第一令牌指示初始发现消息用于发起第一执行上下文和第二执行上下文的第一服务之间的第一信道的建立;在第一执行上下文中接收从第二执行上下文发送的第二初始发现消息;在第一执行上下文中识别来自第二执行上下文的第二初始发现消息包含第二令牌,所述第二令牌指示第二初始发现消息用于发起第一执行上下文和与第二执行上下文的第一服务不同的第二执行上下文的第二服务之间的第二信道的建立。

操作可以包括:在建立第一执行上下文和第二执行上下文之间的双向通信信道之后:识别与显示在第一执行上下文的呈现内的控制元素的用户交互;以及响应于识别与显示在第一执行上下文的呈现内的控制元素的用户交互,通过双向通信信道将与显示在第一执行上下文的呈现内的控制元素的用户交互的指示从第一执行上下文发送到第二执行上下文。

与显示在第一执行上下文的呈现内的控制元素的用户交互指示隐藏或关闭由第二执行上下文执行的内容的呈现的指令。

本文公开的主题的一些实施方式包括一个或多个存储指令的计算机可读介质,所述指令在由一个或多个处理器执行时使一个或多个处理器执行根据本文描述的任一实施方式的方法。

本文公开的主题的一些实施方式包括计算系统,计算系统包括一个或多个处理器和一个或多个计算机可读介质。

本文公开主题的一些实施方式包括具有一个或多个处理器和一个或多个计算机可读介质的计算系统,一个或多个计算机可读介质编码有指令,指令在被执行时使所述一个或多个处理器实现:执行来自第一源的内容的第一执行上下文;执行来自与所述第一源不同的第二源的内容的第二执行上下文;以及安全应用,按照由所述安全应用实施的同源策略限制所述第一执行上下文和所述第二执行上下文中的每一个访问另一个的数据。第一执行上下文和第二执行上下文被配置为建立双向通信信道以通过执行操作来在第一执行上下文和第二执行上下文之间携带消息,所述操作包括:在第一执行上下文中接收从第二执行上下文发送的初始发现消息;在第一执行上下文中并且基于从第二执行上下文发送的初始发现消息确定第二执行上下文的标识符;使用第二执行上下文的标识符建立双向通信信道的第一单向子信道,第一单向子信道被配置为将消息从第一执行上下文携带到第二执行上下文;在第二执行上下文中接收通过第一单向子信道从第一执行上下文发送的连接广播消息;在第二执行上下文中并且基于通过第一单向子信道从第一执行上下文发送的连接广播消息确定第一执行上下文的标识符;和使用第一执行上下文的标识符建立双向通信信道的第二单向子信道,第二单向子信道被配置为将消息从第二执行上下文携带到第一执行上下文。

本文公开的主题的实施方式可以在某些实例中实现下列优点中的一个或多个。可以在计算机环境中建立促进执行上下文之间的交叉源通信的通信信道,而不规避同源的安全要求。可以建立和证实信道以确保信道可以可靠地被一个或多个服务使用。在一些实施方式中,交叉源通信信道给予的通信可以允许两个或更多个执行上下文提供统一界面,在该统一界面中,一个上下文中出现的事件可以触发或影响一个或多个其他上下文中的事件,即便执行上下文与不同源关联。例如,用户界面的第一部分可以呈现在网页的iframe中,并且用户可以选择顶级网页中的一个或多个控件来在iframe内引起响应。这避免了用户从网页导航离开的需要,从而减少网络流量。在一些实施方式中,本文公开的用于建立通信信道的技术允许交叉源执行上下文发现彼此以使得可以限定信道的端点。鉴于整个公开,本领域普通技术人员将会意识附加特征和优点。

附图说明

图1描绘了呈现在web浏览应用中的具有嵌入的内容框架的示例网页。

图2描绘了示例文档和嵌入的内容框架的框图。

图3描绘了包括多个嵌入的内容框架的文档的框图。

图4描绘了用于在强制执行同源策略的环境中在交叉源执行上下文当中创建和使用双向通信信道的示例过程的流程图。

图5描绘了用于在交叉源执行上下文之间建立双向通信信道的示例过程的泳道图。

图6描绘了用于为包括多个嵌入的内容框架的电子文档建立交叉源双向通信信道的示例过程的泳道图。

图7描绘了用于针对执行上下文中的多个服务复用双向通信信道的示例过程的泳道图。

图8示出了可以用于实现本文描述的技术的计算设备和移动计算设备的示例。

各附图中同样的附图标记指示同样的元件。

具体实施方式

本文档描述了用于在交叉源执行上下文之间建立通信的基于计算机的系统、方法、设备和其他技术。在一些实施方式中,所述技术可以应用于在主要网页和经由内嵌框架(inlineframe,iframe)嵌入在主要网页中的次要网页之间建立双向通信,即便在主要和次要网页具有不同源时。一旦建立双向通信信道,这两个网页中的脚本就可以利用信道来实现跨源分隔的一套服务。例如,当用户在主要网页中的元素上点击时,来自主要页的脚本可以使用于次要页的执行上下文意识到点击事件。来自次要页的处理程序脚本(handlerscript)然后可以响应于点击事件执行编程的例程。这样,交叉源执行上下文之间的双向通信信道可以促进无缝的用户体验以使得嵌入的内容对于用户看起来就像它真是主要网页的一部分,而不是嵌入在单独的容器中。

一般地,执行上下文是用于执行特定内容项目(诸如,脚本、网页、工作表或其他文档)的专用计算过程。系统可以为应用中打开的每个窗口创建相应的执行上下文,其中每个窗口呈现不同的内容项目。系统(例如,操作系统或计算系统上的应用)可以保持各个执行上下文彼此分离,以使得在一个执行上下文中发生的事件不影响其他同时地运行的执行上下文。例如,当用户刷新具有第一执行上下文的第一网页时,刷新事件可以不直接影响在相同浏览器内打开的其他网页,因为它们被保持在分离的执行上下文中。另外,对于强制执行同源策略的计算系统,可以进一步限制来自不同源的内容项目的执行上下文彼此交互。尽管系统可以允许具有相同源的内容项目的执行上下文中的脚本彼此交互并自由地访问彼此管理的数据,但是同源策略可能限制来自交叉源执行上下文的脚本类似地彼此交互或访问彼此管理的数据。

现在参考图1,示出了呈现在网页浏览应用的窗口100中的示例网页102的示意图。网页102包括各条主要内容(诸如,标题“examplewebsite”)和文本栏。网页102来自第一源,其中第一源至少部分地由网页102的统一资源定位符(url)(http://www.firstorigindomainexample.com/home.htm)表示。在一些实施方式中,源由包括下述内容的信息元组限定:(i)uri方案或协议(例如,http对ftp对https)、(ii)主机名称和(iii)端口。如果在两个元组中的任意一条信息不匹配,则由元组限定的源被认为不同。在更一般的实施方式中,“源”可以根据互联网工程任务组(internetengineeringtaskforce,ietf)请求注解(requestforcomments,rfc)6454,“web源内容(theweborigincontent)”中指定的程序来确定。

网页102的主要内容可以由浏览器在专用执行过程中执行。因为网页102呈现在浏览器窗口100中,所以用于主要网页102的执行过程还与网页102呈现在其中的窗口100对应。

除了网页102的主要内容之外,网页102还包括嵌入的内容框架104a和104b。第一嵌入的内容框架104a呈现来自第二源的次要内容,并且第二嵌入的内容框架104b呈现从第三源获得的次要内容。在一些实施方式中,内容框架104a和104b均由一个或多个iframe限定,并且可以给每个iframe提供其自己的执行上下文。参考图2进一步详细地描述如同内容框架104a和104b的示例嵌入的内容框架的架构。作为由web浏览器应用强制执行的同源策略以及顶级网页102和呈现在嵌入的内容框架104a和104b中的内容的不同源的结果,可以限制网页102和嵌入的内容的相应执行上下文进行彼此的某些交互和/或访问彼此的数据。与文档(或用于文档的执行上下文)关联的数据可以例如包括用于文档的文档对象模型(dom)、与文档的用户交互的指示、文档属性或这些和其他数据的组合。例如,可以允许来自第一源的第一网页中的脚本检查和修改来自相同源的第二网页的dom,或设置针对第二网页中发生的事件的侦听器。相较之下,作为同源策略的结果,可以阻止来自第一源的第一网页中的脚本检查或修改来自不同源的第二网页的dom,或设置针对第二网页中发生的事件的侦听器。

在一些实施方式中,可以通过将脚本或其他计算机代码注入(inject)顶级页面中来将用于呈现次要内容的内容框架嵌入顶级网页中,所述脚本或其他计算机代码在被执行时使浏览器动态地将框架插入到网页中并请求一个或多个次要内容项目以呈现在框架中。可以从与顶级网页的源不同的源检索次要内容项目。例如,可以从用于已经同意显示来自内容提供网络的次要内容的发布者的第一web域(例如,第一源)获得顶级网页102。然后,第一嵌入的内容框架104a中的脚本可以调用内容提供网络以获得次要内容项目(例如,对于用户位置的天气数据、来自地图服务器或导航服务器的地图或其他内容项目)以显示在框架104a内。类似地,第二嵌入的内容框架104b中的脚本也可以调用内容提供网络以检索另一次要内容项目以显示在框架104b中。

在一些实施方式中,可以在与不同源关联的执行上下文之间建立双向通信信道。参考图4-7描述可以如何建立这样的信道的细节。有利地,双向通信信道可以允许来自交叉源执行上下文的脚本在彼此之间发送消息并且实现涉及交叉源交互的一套运行时服务。例如,可以在第一执行上下文中设置事件侦听器。当事件侦听器检测到规定的事件的发生时,侦听器可以调用使用双向信道的处理程序以使第二执行上下文意识到事件的发生。第二执行上下文中的侦听器然后可以以任何适当的方式处理通知,包括通过双向信道向第一执行上下文发回确认和进一步的消息。

在一些实施方式中,双向通信信道可以用于在交叉源执行上下文(诸如顶级网页102和嵌入的内容框架104a和104b)之间创建统一用户界面。基于通过双向信道发送的消息,顶级网页102可以响应嵌入的内容框架104a或104b中的事件,反之亦然。例如,顶级网页102可以包括用户界面元素106a和106b。元素106a和106b分别邻近但是在其对应的嵌入的内容框架104a和104b之外显示。因为元素106a和106b被提供在顶级页102中并且在嵌入的内容框架104a和104b外部,所以浏览器的同源策略可以典型地限制这些元素控制嵌入的框架104a和104b内的动作。但是,一旦根据本文公开的技术之一在交叉源执行上下文之间建立了双向通信信道,与在顶级网页102中的元素106a或106b的交互就可以分别在嵌入的内容框架104a或104b内触发响应。

例如,可以在顶级网页102中设置侦听器以识别用户何时选择(例如,点击)了元素106a。当检测到对元素106a的选择时,顶级网页102中的处理程序脚本可以通过先前建立的双向通信信道发送消息,其然后被嵌入的内容框架104a中的侦听器检测。然后,来自嵌入的内容框架104a的处理程序脚本可以响应于用户对元素106a的选择执行一个或多个操作,例如,关闭内容框架104a,更新内容框架104a中显示的内容,播放或暂停内容框架104a中的媒体项目,为征集关于最近显示在内容框架104a中的内容的问题的用户生成综述,请求关于顶级网页102的状态的附加信息,向顶级网页102提供指令以执行动作(例如,从顶级网页102关闭内容框架104a,生成新的嵌入的内容框架或弹出窗口)或这些和其他操作的组合。

在一些实施方式中,可以实施本文公开的技术来在web浏览器环境之外的交叉源执行上下文之间建立双向通信信道。例如,计算设备上保持在与不同源关联的分离的执行上下文中的应用或操作系统的任何两个窗口或用户界面可以根据本文公开的技术建立双向通信信道。

图2描绘了示例文档200和嵌入的内容框架201的框图。例如,文档200可以是计算设备上原生应用(nativeapplication)的网页或界面。在一些实施方式中,文档200由内容项目的层次结构(hierarchy)形成,其中项目中的至少一些具有不同源。例如,发布者的网站可以包括显示来自发布者的主要内容的顶级页面,和显示来自第三方内容提供者的次要内容的在层次结构中较低的一个或多个后代(descendant)内容项目。后代内容项目例如提供在嵌入的内容框架中。一般而言,后代内容项目可以被理解为提供在嵌套在较高级(例如,父或其他祖先)执行上下文或容器下方的执行上下文或容器中的内容项目。

文档200可以由计算设备上的应用(例如web浏览器)执行。在一些实施方式中,应用在容器中呈现来自针对文档200的项目的层次结构的个体内容项目或内容项目的组。容器可以是窗口对象,举例来说,诸如web浏览器中的选项卡或嵌入在较高级内容项目中的iframe。当执行文档200时,应用为每个容器创建相应的执行上下文,其中对于给定容器的执行上下文执行呈现在该容器中的对应内容项目。例如,顶级网页可以呈现在浏览应用的主窗口中,而嵌入的内容项目可以呈现在嵌套在应用的主窗口内的iframe中。浏览器可以为呈现在主窗口中的顶级网页创建第一执行上下文,为嵌入在顶级页中并呈现在外iframe中的子内容项目创建第二执行上下文,并且为嵌入在子内容项目中并且呈现在嵌套在外iframe内的内iframe中的孙内容项目创建第三执行上下文。

如图2所示,示例文档200包括一系列嵌套的容器。顶级容器203呈现文档200的主要内容项目。嵌入的内容框架201而后包括用于层次结构中主要项目下面的内容项目的两个较低阶容器。例如,嵌入的内容框架201包括直接嵌套在顶级容器203内的子容器202。子容器202而后进一步包括直接嵌套在子容器202内的孙容器208。在一些实施方式中,主要内容项目包括脚本,该脚本在被执行时实例化子容器202。在实例化子容器202之后,执行呈现在子容器202中的子内容项目内的脚本,这转而实例化孙容器208。

在一些实施方式中,在显示文档200时,可以向用户隐藏嵌入的内容框架201内的嵌套的容器的存在。例如,孙容器208的显示区域可以跨越子容器202的整个显示区域。另外,子容器202和孙容器208可以不包括可见边框,以使得呈现在孙容器208中的任何内容项目看上去就像其被无缝地整合到顶级内容项目的表示中。尽管子容器202(而非孙容器208)中的内容可以不可见,但是其存在可以被利用于促进用于孙容器208和顶级容器203的执行上下文之间的通信。子容器202还可以包括例如促进孙容器208的创建和/或促进内容的选择以呈现在孙容器208中的脚本。在一些实施方式中,如参考图5进一步详细地描述的,子容器202可以促进顶级容器203和孙容器208的交叉源执行上下文之间双向通信信道的建立,这是由于其作为孙容器208的祖先(父)的家族关系并且还由于其与顶级容器同源但是与孙容器208不同源的关联性。

在一些实施方式中,文档200包括脚本(或其他可执行代码),其在执行时实现一个或多个服务以执行文档200限定的各种任务。一些服务是异步的并且在检测到指定事件发生后执行用于任务的操作。用于异步服务的脚本可以包括例如一个或多个侦听器模块和一个或多个处理程序模块以侦听并处理检测的事件。一些服务被同步地执行,例如,作为在初始加载文档200时的例程的一部分。在一些实施方式中,文档200可以包括连接服务206a-206b,其被配置为执行操作以在例如用于顶级容器203和孙容器208的交叉源执行上下文之间建立双向通信信道。关于图4-7进一步详细地讨论由连接服务206a-206b执行的操作。连接服务206a的第一组件可以由子容器202中的脚本提供,而连接服务206b的第二组件可以由孙容器208中的脚本提供。此外,文档200可以包括一个或多个运行时服务204a-n、212a-n,其执行其他任务,诸如涉及使用由连接服务206a-206b建立的双向通信信道在交叉源执行上下文之间的交互的任务。

图3是包括多个嵌入的内容框架304a-n的文档300的框图。如图文档200(图2),图3所示的文档300包括一组运行时服务306a-n和嵌入的内容。然而,不同于文档200,文档300包括多个嵌入的内容框架304a-n,以例如呈现来自一个或多个源的多个次要内容项目。每个嵌入的内容框架304a-n可以包括一个、两个、三个、四个或更多个嵌套的内容容器。在一些实施方式中,嵌入的内容框架304a-n中的所有或一些是结构化的,如同图2的示例嵌入的内容框架201。例如,嵌入的内容框架304a-n中的给定一个可以包括一个或多个嵌套的外容器(其中,外容器的最外面是顶级容器的第一代后代,诸如子容器202)和内容器,诸如孙容器208。每个嵌入的内容框架304a-n还可以包括被配置为实现连接服务以在交叉源执行上下文之间建立双向通信的脚本。在一些实施方式中,用于文档300中每个容器的执行上下文可以以与容器的层次结构布置对应的层次结构来表示。

转到图4,示出了用于在强制执行同源策略的环境中在交叉源执行上下文当中创建和使用双向通信信道的示例过程400的流程图。关于图5-7描述用于建立信道的操作的其他细节。

在阶段402,计算系统(例如,台式计算机、笔记本计算机、移动计算设备或可穿戴计算设备)创建第一执行上下文和第二执行上下文。在一些实施方式中,第一执行上下文和第二执行上下文各自与文档或被配置为呈现来自不同源的内容项目的其他界面中的不同容器对应。举例来说,本讨论将考虑计算系统已经创建了第一执行上下文以执行来自第一源的内容,来自第一源的内容呈现在嵌入的内容框架的外容器(例如,子容器202)中。文档的内容框架被嵌入其中的顶级容器也包括来自第一源的内容,因此顶级容器和外容器的执行上下文相同。因此,同源策略允许这些执行上下文交互的相对自由以及对彼此的受限数据的访问。相较之下,该示例中的第二执行上下文执行来自第二源的内容,该内容呈现在嵌入的内容框架的内容器(例如,孙容器208)中。

在阶段404,系统执行连接服务以在第一源的执行上下文和第二源的执行上下文之间建立双向通信信道。例如,通信信道可以直接将与第一源关联的第一执行上下文和/或顶级执行上下文连接到与第二源关联的第二执行上下文。

为了生成双向通信信道,系统可以执行在若干子阶段406-410中的操作。在子阶段406,在第一执行上下文和第二执行上下文之间建立第一单向子信道。第一单向子信道从第一执行上下文前往第二执行上下文并且被配置为将消息从第一执行上下文携带到第二执行上下文。在子阶段408,在第二执行上下文和第一执行上下文之间建立第二单向子信道。第二单向子信道从第二执行上下文前往第一执行上下文并且被配置为将消息从第二执行上下文携带到第一执行上下文。第一子信道和第二子信道一起形成双向通信信道,其中每个子信道限定用于双向通信的目标端点。

在一些实施方式中,第一执行上下文和第二执行上下文的连接服务可以利用原始(primitive)但安全的交叉源消息传输协议来在建立通信信道的过程期间在相应的执行上下文之间发送消息。可以通过第一执行上下文和第二执行上下文在其中运行的操作系统或应用的应用编程接口(api)将消息传输协议暴露给连接服务。例如,一些web浏览器包括postmessage()函数,其限定异步地将消息从一个执行上下文发送到另一个执行上下文的能力,甚至在这两个执行上下文在同源策略下否则被限制彼此交互时。执行上下文可以侦听向其发送的postmessage,并且可以选择处理检测的消息或不处理。

postmessage()协议被设计成使得发送的postmessage不被接收方执行过程自动处理,尽管如果接收方正期望消息并且接收方执行过程已经提供适当的脚本(例如,侦听器和处理程序)以检测并处理向其发送的任何postmessage,则可以处理发送的postmessage。然而,postmessage()协议不通过本身提供双向通信或提供对给定文档或界面中其他执行上下文的发现。关于图5-7进一步详细公开的操作例如在某些实例中可以至少部分地解决postmessage()协议的这些缺陷。

在可选实施方式中,当初始建立第一单向子信道和第二单向子信道时,它们初始可以被设置到未连接(非操作)状态。当子信道并且因此双向信道处于未连接状态时,可以阻止外部服务(例如,运行时服务)使用信道,因为还没有确认消息可以被成功地传递到相应的接收方执行上下文。因此,在阶段410,系统验证双向通信信道以确认其操作状态。如果信道(包括第一子信道和第二子信道)被验证,则系统将信道(包括第一子信道和第二子信道)的状态设置为连接状态(操作状态)。否则,信道的状态保持未连接。

在阶段412,在建立并验证双向通信信道之后,服务可以使用信道来在交叉源执行上下文之间携带消息。服务可以使用信道将对于关于受限数据的信息的请求从第一执行上下文发送到第二执行上下文(或反之亦然),通知执行信道中之一在其他执行信道中事件的发生,检查其他执行上下文的dom的一些部分,修改其他执行上下文的dom的一部分和/或执行这些操作和其他操作的组合。

图5是用于在交叉源执行上下文之间建立双向通信信道的示例过程500的泳道图。过程500可以由具有在一个或多个位置的一个或多个计算机的计算系统执行,其中计算系统已经实例化用于执行来自第一源的内容的第一执行上下文和用于执行来自第二源的内容的第二执行上下文。在图5的示例中,第一执行上下文与外容器(例如,外容器202(图2))对应,并且第二执行上下文与嵌套在外容器内的内容器(例如,容器208(图2))对应。特别地,由针对外容器的第一执行上下文执行的操作可以由提供第一执行上下文的连接服务的一个或多个脚本执行。类似地,由针对内容器的第二执行上下文执行的操作可以由提供第二执行上下文的连接服务的一个或多个脚本执行。另外,外容器可以嵌入在顶级容器(例如,容器203)中。顶级容器可以呈现也来自第一源的内容。作为第一执行上下文和第二执行上下文不同源的结果,系统可以强制执行同源策略以限制第一执行上下文和第二执行上下文之间的交互,但是,由于第一执行上下文和顶级容器的执行上下文的共同源,可以允许第一执行上下文和顶级容器的执行上下文之间的这样的交互。

在阶段506,第一执行上下文针对发现消息在顶级执行上下文中设置侦听器。第一执行上下文的连接服务能够在同源策略下在顶级执行上下文中设置侦听器,因为它们共享相同的源。特别地,第一执行上下文的连接服务在顶级执行上下文而不是在第一执行上下文中设置侦听器,因为第二执行上下文由于同源策略的限制而初始地没有察觉第一执行上下文。这样,第二执行上下文初始地不能将第一执行上下文作为发现消息的预期接收方,即便可以指示消息应当被发送到发现侦听器被设置的顶级容器。

在阶段508,第二执行上下文针对连接广播消息在第二执行上下文中设置侦听器。关于阶段518和520进一步描述连接广播消息。

在阶段510,第二执行上下文向顶级容器发送发现消息。在一些实施方式中,使用postmessage()协议来发送发现消息。发现消息是这样一种类型的消息,第一执行上下文被配置为将该消息识别为发起用于建立双向通信信道的连接例程的消息。

在阶段512,第一执行上下文检测已经从第二执行上下文发送的发现消息。使用在阶段506设置的发现侦听器检测发现消息。

在阶段514,第一执行上下文分析发现消息以确定消息的源。在一些实施方式中,第一执行上下文通过访问消息的源字段的值来确定发现消息的源。该值可以是第二执行上下文的唯一标识符。发送到顶级执行上下文的发现消息从而允许第一执行上下文确定第二执行上下文的存在并识别第二执行上下文。

在阶段516,第一执行上下文在第一执行上下文和第二执行上下文之间建立第一单向子信道。第一单向子信道基于从发现消息访问的唯一标识符将第二执行上下文识别为双向通信信道的一个端点。第一单向子信道可以用于将消息从第一执行上下文发送到第二执行上下文。

在阶段518,第一执行上下文使用第一单向子信道将连接广播消息发送到第二执行上下文。在一些实施方式中,发送连接广播消息涉及:使用postmessage()协议并使用从发现消息获得的第二执行上下文的标识符将消息发送到第二执行上下文作为连接广播消息的预期接收方。发现消息是这样一种类型的消息,第二执行上下文被配置为将该消息识别为对于发现消息的响应。

在阶段520,第二执行上下文检测已经从第一执行上下文发送的连接广播消息。使用在阶段508设置的连接广播侦听器检测连接广播消息。

在检测到连接广播消息时,第二执行上下文对消息进行分析以确定其源。在一些实施方式中,第二执行上下文通过访问消息的源字段的值来确定连接广播消息的源。该值可以是第一执行上下文的唯一标识符。发送到第二执行上下文的连接广播消息从而允许第二执行上下文确定第一执行上下文的存在并识别第一执行上下文。

在阶段522,第二执行上下文在第二执行上下文和第一执行上下文之间建立第二单向子信道。第二单向子信道基于从连接广播消息访问的唯一标识符将第一执行上下文识别为双向通信信道的第二端点。第二单向子信道可以用于将消息从第二执行上下文发送到第一执行上下文。

随着第一单向子信道和第二单向子信道被建立,双向通信信道也被建立,因为该对子信道足以在第一执行上下文和第二执行上下文之间提供双向通信。然而,在一些实施方式中,可以初始地将双向通信信道的状态设置为未连接。在未连接状态下,双向通信信道可能对于除了连接服务之外的服务的使用不可用,因为信道的操作还未被验证。服务可以被配置为在使用之前检查信道的状态。如果信道被连接,则外部服务可以使用其来跨交叉源执行上下文发送消息。如果信道未被连接,则外部服务还不可以使用信道。

使信道成为连接状态的验证过程可以开始于阶段524,在阶段524,第二执行上下文使用双向通信信道中的第二子信道将第一信道连接消息发送到第二执行上下文。信道连接消息是指示接收方执行上下文将双向通信信道的状态设置为连接状态的消息。在一些实施方式中,可以使用postmessage()协议来发送信道连接消息(以及在第一执行上下文和第二执行上下文之间交换的任何其他消息)。第一执行上下文可能已经针对第一连接消息在第一执行上下文中设置了侦听器(例如,在建立第一子信道之后)。当侦听器检测到来自第二执行上下文的第一连接消息(阶段526)时,第一执行上下文将双向通信信道设置为连接状态(阶段528)。然而,在第一执行上下文和第二执行上下文中的每个处独立地保持信道的状态。因此,在阶段530,第一执行上下文将第二信道连接消息发送到第二执行上下文。第二执行上下文可能已经针对第二连接消息在第二执行上下文中设置了侦听器(例如,在建立第二子信道之后)。当侦听器检测到来自第一执行上下文的第二连接消息(阶段532)时,第二执行上下文也将双向通信信道从未连接状态转变到连接状态。随着在第一执行上下文和第二执行上下文两者中端点被激活并且信道的状态被设置为连接的,可以由在与第一源和第二源关联的执行上下文中的一个或多个服务正确地使用双向信道。

如关于图3所述,一些文档或界面可以包括多个嵌入的内容框架,例如框架304a-n。对于这样的文档,每个嵌入的内容框架可能具有建立其自己的双向通信信道以允许在嵌入的内容框架的外容器(例如,容器202)的执行上下文和嵌入的内容框架的内容器(例如,容器208)之间进行通信的需要。在建立针对每个嵌入的内容框架的相应双向信道时牵涉的一个挑战是发送到用于顶级容器的执行上下文的初始发现消息能够被由用于所有嵌入的内容框架的外容器的执行上下文设置的每个发现消息侦听器听到。为了防止每个执行上下文都响应每个发现消息,用于给定嵌入的内容框架的外容器的针对发现消息事件的处理程序可以通过检查发现消息的源(即,第二执行上下文)是否是针对嵌入的内容框架的外容器的执行上下文的后代来确定其是否是发现消息的预期接收方。例如,如果第一嵌入的内容框架的外iframe中的连接服务确定第一检测到的发现消息是从嵌套在外iframe内的内iframe发送的,则连接服务可以确定其为发现消息的预期接收方并且可以通过继续建立双向通信信道的程序来响应消息,如关于图5所公开。如果发现消息是从非家族源发送的(例如,不来自相同的嵌入的内容框架中的后代),则外iframe的连接服务可以确定其不是发现消息的预期接收方并且可以因此丢弃消息。

图6是在文档中提供多个嵌入的内容框架时用于建立交叉源双向通信信道的示例过程600的泳道图。该图示出可以由两个嵌入的内容框架的容器中的连接服务采取以为每个嵌入的内容框架建立专用双向通信信道的动作。在一些实施方式中,每个嵌入的内容框架类似于来自图2的框架201布置,并且各自包括呈现来自与托管每个嵌入的内容框架的顶级容器的内容的相同源的内容的外容器。每个嵌入的内容框架中的内容器可以呈现来自与外框架和顶级容器的源不同的一个或多个源的内容。计算系统可以实例化个体执行上下文以分别执行来自每个容器的内容。在一些实施方式中,本文公开的技术有利地允许多个嵌入的内容框架使用相同或相似的脚本(例如,连接服务)以同时连接到顶级容器的执行上下文,甚至在每个内框架将相同的发现消息发送到顶级执行上下文时。

在阶段614,第一执行上下文在顶级执行上下文中设置发现消息侦听器。同样地,在阶段618,第三执行上下文也在顶级执行上下文中设置发现消息侦听器。在阶段616和620,第二执行上下文和第四执行上下文两者在其相应的执行上下文内设置连接广播侦听器。在阶段622,第二执行上下文向顶级容器的执行上下文发送初始发现消息。在阶段624和626,来自两个嵌入的内容框架的发现侦听器检测来自第二执行上下文的初始发现消息。然后,在阶段628,第一执行上下文确定其是初始发现消息的目标(例如,预期接收方),因为消息的属性的值指示消息是从第一执行上下文的后代发送的。相较之下,在阶段628,第三执行上下文确定其不是初始发现消息的目标,因为其不是从第三执行上下文的后代发送的,因此不来自相同的嵌入的内容框架的内容器。第三执行上下文因此忽略发现消息并且丢弃它而不进一步采取动作以建立与第二执行上下文的连接。另一方面,第一执行上下文从阶段514(图5)继续以继续建立并验证双向通信信道。

图7是用于针对执行上下文中的多个服务复用双向通信信道的示例过程700的泳道图。例如,嵌入的内容框架可以在包括第一运行时服务的内容器(例如,iframe或其他窗口对象)中呈现内容,第一运行时服务被配置为在用户选择了顶级容器中的特定控制元素时使用双向通信信道以传送指令来关闭嵌入的内容框架。内容器还可以包括第二运行时服务,第二运行时服务被配置为使用双向通信信道传送交叉源指令以基于对内容器中控制元素的选择来更新顶级容器中的内容。在一些实施方式中,每个服务可能需要专用双向通信信道。过程700指示示例技术,通过该技术可以在相同对的交叉源执行上下文之间建立多个信道。在一些实施方式中,每个信道被指派给与执行上下文之一关联的多个服务中的不同的一个。在图7中,最左道指示用于嵌入的内容框架的外容器的第一执行上下文的操作;中间道指示第二执行上下文代表嵌入的内容框架的内容器的第一服务的操作;并且最右道指示用于嵌入的内容框架的内容器的第二服务的第二执行上下文的操作。

在阶段708,第一执行上下文在用于顶级容器的执行上下文中设置发现消息事件侦听器,该顶级容器与外容器共享相同源。

在阶段710和712,第二执行上下文的连接服务在第二执行上下文中设置两个连接广播消息事件侦听器。这些侦听器中的第一侦听器代表第一运行时服务被设置,并且这些侦听器中的第二侦听器代表内容器的第二运行时服务被设置。为了区分稍后可能从父执行上下文(例如,第一执行上下文)接收的预期连接广播消息,第一侦听器被配置为仅检测包括与第一运行时服务关联的第一令牌的连接广播消息。同样地,第二侦听器被配置为仅检测包括与第二运行时服务关联的第二令牌的连接广播消息。

在阶段714,第二执行上下文将发现消息发送到顶级执行上下文以指示建立双向通信信道的请求。所发送的发现消息可以包括与第一运行时服务关联的第一令牌,以指示要关于第一运行时服务建立信道。

在阶段716,第一执行上下文基于来自发现消息侦听器的指示检测来自第二执行上下文的发现消息。在阶段718,第一执行上下文分析发现消息以确定消息的源。例如,第一执行上下文可以从与发现消息关联的属性确定第二执行上下文的标识符。使用第二执行上下文的标识符,在阶段720,第一执行上下文随后建立与第二执行上下文的第一服务的第一单向子信道。通过将第一子信道配置为包括在通过第一单向子信道发送到第二执行上下文的后续消息中的发现消息中包括的第一令牌,可以将第一单向子信道与第一服务关联。在阶段722,第一执行上下文随后通过第一单向子信道将第一连接广播消息发送到第二执行上下文。第一连接广播消息包括第一令牌以指示消息属于第二执行上下文的第一运行时服务。

作为将第一连接广播消息发送到第二执行上下文的结果,第二执行上下文接收消息并且由连接广播侦听器检测(阶段724和730)。在阶段726,第二执行上下文分析第一连接广播消息,识别消息中的第一令牌并且从第一令牌确定消息属于第一运行时服务。过程700然后可以继续到阶段522(图5)以在第一执行上下文和第二执行上下文的第一服务之间建立并验证双向通信信道。第一令牌可以包括在建立信道期间第一执行上下文和第二执行上下文之间的后续消息中,并在建立信道之后用于发送数据以指示消息属于第一运行时服务。

相较之下,在阶段732,第二执行上下文确定第一连接广播消息不包含与第二运行时服务关联的第二令牌,因此第一连接广播消息不属于第二运行时服务。因此,第二执行上下文关于第二运行时服务丢弃第一连接广播消息并且选择不在第一执行上下文和第二执行上下文的第二运行时服务之间建立信道。尽管未在图7的图中示出,但是在一些实施方式中,可以建立分离的信道用于在第一执行上下文和第二执行上下文的第二运行时服务之间进行通信。

在一些实施方式中,为了强化双向通信信道的安全性,可以由第一执行上下文和第二执行上下文中的任一者或两者保持可允许源的白名单。如果在用于请求建立与用于第二源的另一执行上下文的双向信道的第一源的执行上下文中接收到发现消息,则用于第一源的执行上下文可以检查白名单以确定第二源是否出现(例如,第二源的域是否是白名单中的信任域)。如果第二源不在白名单上,则用于第一源的执行上下文可以拒绝建立通信信道的请求。在一些实施方式中,可以将被禁的源添加到黑名单,在接受建立用于交叉源执行上下文的信道的请求之前检查该黑名单。

图8示出了可以用于实现本文描述的技术的计算设备800和移动计算设备的示例。计算设备800旨在代表各种形式的数字计算机,诸如膝上型计算机、台式计算机、工作站、个人数字助理、服务器、刀片式服务器、大型机以及其他适当的计算机。移动计算设备850旨在表示各种形式的移动设备,诸如个人数字助理、蜂窝电话、智能电话和其他类似的计算设备。在本文示出的组件、它们的连接和关系以及它们的功能应当仅是示例性的,而不应当限制在本文档中描述和/或请求保护的本发明的实施方式。

计算设备800包括处理器802、存储器804、存储设备806、连接到存储器804和多个高速扩展端口810的高速接口808以及连接到低速扩展端口814和存储设备806的低速接口812。处理器802、存储器804、存储设备806、高速接口808、高速扩展端口810和低速接口812中的每一个使用各种总线而互连,并且可以安装在共同母板上或酌情以其他方式安装。处理器802可以处理用于在计算设备800内执行的指令,包括存储在存储器804中或在存储设备806上的指令以为在外部输入/输出设备(诸如耦合到高速接口808的显示器816)上的gui显示图形信息。在其他实施方式中,可酌情连同多个存储器或多种类型的存储器一起使用多个处理器和/或多个总线。另外,可以连接多个计算设备,其中每个设备提供所需操作的一些部分(例如,作为服务器阵列(serverbank)、刀片式服务器的群组或多处理器系统)。

存储器804在计算设备800内存储信息。在一些实施方式中,存储器804是一个或多个易失性存储器单元。在一些实施方式中,存储器804是一个或多个非易失性存储器单元。存储器804还可以是另一形式的计算机可读介质,诸如磁盘或光盘。

存储设备806能够为计算设备800提供大容量存储。在一些实施方式中,存储设备806可以为或包含计算机可读介质,诸如软盘设备、硬盘设备、光盘设备或带设备、快闪存储器或其他类似固态存储器设备或设备阵列,包括在存储区域网络或其他配置中的设备。计算机程序产品还可以包含指令,所述指令在被执行时执行诸如上述方法的一个或多个方法。计算机程序产品也可以有形地实现在计算机可读或机器可读介质(诸如存储器804、存储设备806或处理器802上的存储器)中。

高速接口808管理用于计算设备800的带宽密集的操作,而低速接口812管理较低的带宽密集的操作。这样的功能分配仅是示例性的。在一些实施方式中,高速接口808耦合到存储器804、显示器816(例如通过图形处理器或加速器)并且连接到高速扩展端口810,高速扩展端口810可接受各种扩展卡(未示出)。在该实施方式中,低速接口812耦合到存储设备806和低速扩展端口814。可包括各种通信端口(例如,usb、蓝牙、以太网、无线以太网)的低速扩展端口814可以耦合到一个或多个输入/输出设备,诸如键盘、指向设备、扫描仪或(例如通过网络适配器的)联网设备,诸如交换机或路由器。

如图中所示,计算设备800可以以许多不同形式来实现。例如,其可以被实现为标准服务器820或在成群组的这样的服务器实现多次。此外,其可以实现在个人计算机(诸如,膝上型计算机822)中。其也可以被实现为机架服务器系统824的一部分。替代地,来自计算设备800的组件可以与移动设备(诸如移动计算设备850)中的其他组件(未示出)组合。每个这样的设备可以包含计算设备800和移动计算设备850中的一个或多个,并且整个系统可以由彼此通信的多个计算设备组成。

移动计算设备850除了其他组件之外包括处理器852、存储器864、输入/输出设备(诸如显示器854)、通信接口866和收发器868。移动计算设备850还可以被提供有存储设备,诸如微硬盘(micro-drive)或其他设备,以提供附加存储。处理器852、存储器864、显示器854、通信接口866和收发器868中的每一个使用各种总线互连,并且组件中的一些可安装在共同的母板上或者酌情以其他方式安装。

处理器852可以在移动计算设备850内执行指令,包括存储在存储器864中的指令。处理器852可以被实现为包括分离的多个模拟和数字处理器的芯片的芯片组。处理器852可以例如提供用于移动计算设备850的其他组件的协调,诸如控制用户接口、移动计算设备850所运行的应用和移动计算设备850的无线通信。

处理器852可以通过控制接口858和耦合到显示器854的显示接口856与用户通信。显示器854可以例如是tft(薄膜晶体管液晶显示)显示器或oled(有机发光二极管)显示器或其他适当的显示器技术。显示接口856可以包括用于驱动显示器854以向用户呈现图形和其他信息的适当电路。控制接口858可以接收来自用户的命令并且对命令进行转换以提交给处理器852。此外,外部接口862可以提供与处理器852的通信,以便使能移动计算设备850与其他设备的近区域通信。外部接口862可以例如在一些实施方式中提供有线通信,或者在其他实施方式中提供无线通信,并且还可以使用多个接口。

存储器864在移动计算设备850内存储信息。存储器864可以被实现为一个或多个计算机可读介质、一个或多个易失性存储器单元或一个或多个非易失性存储器单元中的一个或多个。还可以提供扩展存储器874并将其通过扩展接口872连接到移动计算设备850,扩展接口872可以包括例如simm(单列直插存储器模块)卡接口。扩展存储器874可以为移动计算设备850提供额外存储空间,或者也可以存储用于移动计算设备850的应用或其他信息。特别地,扩展存储器874可以包括执行或补充上述过程的指令,并且还可以包括安全信息。这样,例如,扩展存储器874可以被提供为用于移动计算设备850的安全模块,并且可以被编程有允许对移动计算设备850进行安全使用的指令。此外,可以经由simm卡提供安全应用连同附加信息,诸如,以不可破解的方式将识别信息置于simm卡上。

存储器可以包括例如快闪存储器和/或nvram存储器(非易失性随机存取存储器),如在下面讨论的。计算机程序产品包含指令,所述指令在被执行时执行诸如上述方法的一个或多个方法。计算机程序产品可以是计算机可读介质或机器可读介质,诸如存储器864、扩展存储器874或处理器852上的存储器。在一些实施方式中,可以以传播的信号接收计算机程序产品,例如通过收发器868或外部接口862。

移动计算设备850可以通过通信接口866无线地通信,通信接口866在需要的情况下可以包括数字信号处理电路。通信接口866可以被提供用于在各种模式或协议(诸如,尤其是gsm语音呼叫(全球移动通讯系统)、sms(短消息服务)、ems(增强型消息传输业务)或mms消息传输(多媒体消息传输服务)、cdma(码分多址)、tdma(时分多址)、pdc(个人数字蜂窝)、wcdma(宽带码分多址)、cdma2000、或gprs(通用分组无线业务))下进行通信。这样的通信可以例如通过使用射频的收发器868发生。此外,可以发生短程通信,诸如使用蓝牙、wifi或其他这样的收发器(未示出)。此外,gps(全球定位系统)接收器模块870可以向移动计算设备850提供附加导航和位置相关的无线数据,其可以酌情由移动计算设备850上运行的应用使用。

移动计算设备850还可以使用音频编解码器860进行可听地通信,音频编解码器860可以从用户接收口头信息并将其转换成可使用数字信息。音频编解码器860可以同样为用户生成可听声音,诸如通过(例如,移动计算设备850的手持接送话器(handset)中的)扬声器。这样的声音可以包括来自语音电话呼叫的声音,可以包括记录的声音(例如,语音消息,音乐文件等),并且也可以包括由移动计算设备850上进行操作的应用生成的声音。

如图中所示,移动计算设备850可以以许多不同形式来实现。例如,其可以被实现为蜂窝电话880。其还可以被实现为智能电话882、个人数字助理或其他类似移动设备的一部分。

本文描述的系统和技术的各种实施方式可以实现在数字电子电路、集成电路、特别设计的asic(专用集成电路)、计算机硬件、固件、软件和/或其组合中。这些不同实施方式可以包括在一个或多个计算机程序中的实现,该计算机程序可以在可编程系统上执行和/或解释,可编程系统包括至少一个可编程处理器,其可以是专用或通用目的,可编程处理器耦合为从存储系统、至少一个输入设备以及至少一个输出设备接收数据和指令和向它们发送数据和指令。

这些计算机程序(也称为程序、软件、软件应用或者代码)包括用于可编程处理器的机器指令,并且可以以高级程序化和/或面向对象的编程语言来实现,和/或以汇编/机器语言来实现。在当本文中使用时,术语“机器可读介质”和“计算机可读介质”指任何计算机程序产品、装置和/或设备(例如磁盘、光盘、存储器、可编程逻辑器件(pld)),其用于向可编程处理器提供机器指令和/或数据,包括将机器指令作为机器可读信号接收的机器可读介质。术语“机器可读信号”指用于向可编程处理器提供机器指令和/或数据的任何信号。

为了提供与用户的交互,本文描述的系统和技术可以实现在具有用于向用户显示信息的显示设备(例如,crt(阴极射线管)或lcd(液晶显示)监视器)及键盘和指向设备(例如,鼠标或轨迹球)的计算机上,其中用户可以通过键盘和指向设备向计算机提供输入。也可以使用其他种类的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,(例如视觉反馈、听觉反馈或触觉反馈);并且可以以任何形式接收来自用户的输入,包括声学、语音或触觉输入。

本文描述的系统和技术可以在计算系统中实现,该计算系统包括后端组件(例如,作为数据服务器),或包括中间件组件(例如,应用服务器),或包括前端组件(例如,具有图形用户界面或web浏览器的客户端计算机,用户可通过其与本文描述的系统和技术的实施方式进行交互),或者这样的后端、中间件或前端组件的任意组合。可以通过数字数据通信的任意形式或介质(例如,通信网络)将系统的组件互连。通信网络的示例包括局域网(lan)、广域网(wan)和互联网。

计算系统可以包括客户端和服务器。一般来说,客户端和服务器彼此远离,并且通常通过通信网络交互。通过运行在各个计算机并且彼此具有客户端-服务器关系的计算机程序而形成客户端和服务器的关系。

在本文的系统、方法、设备和其他技术收集关于用户的个人信息(例如,上下文数据)或可能会利用个人信息的情况下,可以给用户提供控制程序或特征是否收集用户信息(例如,关于用户的社交网络、社交动作或行为、职业、用户的偏好或用户的当前位置的信息)或控制是否和/或如何从内容服务器接收可能与用户较相关的内容的机会。此外,可以在存储或使用某些数据之前以一种或多种方式处理所述数据,以便去除个人可识别信息。例如,可以处理用户的身份以使得不能够确定针对该用户的个人可识别信息,或者可以一般化获得位置信息的用户的地理位置(诸如,到市、邮政编码或州级),以使得不能够确定用户的特定位置。因此,用户可以控制如何收集关于用户的信息和如何由内容服务器使用该信息。

尽管上文详细描述了各种实施方式,但其他修改也是可能的。例如,参考一个实施例或实施方式描述的特征可以在本文描述的另一实施例或实施方式中提供。此外,附图中描绘的逻辑流程不要求所示出的特定顺序或者相继顺序来实现合意的结果。此外,可以提供其他步骤,或可以从描述的流程除去步骤,并且可以将其他组件添加到描述的系统或从描述的系统除去其他组件。因此,其他实施方式在下述权利要求的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1