專利名稱:安全的模塊間通信機制的制作方法
技術領域:
本公開總地涉及可在由瀏覽器或其他客戶端應用所處理的網(wǎng)頁或其他結構化文
檔的上下文內(nèi)執(zhí)行的代碼對象之間的通信。
背景技術:
由諸如因特網(wǎng)之類的廣域網(wǎng)連接的交互式系統(tǒng)已經(jīng)穩(wěn)步發(fā)展成為了信息交換、社 會交往和數(shù)字媒體共享的活躍媒介。因特網(wǎng)用戶通常維持著在以可定制的個人頁面為特色 的各種服務提供商處的一個或多個賬戶,所述個人頁面例如是個人主頁(例如,my. yahoo, com等等)、社交網(wǎng)絡站點上的個人頁面(例如,facebook. com、myspace. com等等),等等。 為了增強這種頁面對于端用戶來說的實用性和可定制性,服務提供商有時允許用戶利用一 個或多個功能模塊或窗口小部件(widget)(以下稱之為模塊)來定制其頁面。
在web或因特網(wǎng)環(huán)境中,這些模塊可包括在客戶端應用(例如瀏覽器)的上下文 內(nèi)執(zhí)行以實現(xiàn)多種有用的或娛樂性的功能的HTML代碼和腳本(例如JavaScript,以及異步 JavaScript和XML(AJAX))。例如,模塊可以被開發(fā)來顯示從真正簡單聯(lián)合(RSS)饋送獲得 的內(nèi)容,例如博客條目、新聞標題或播客(podcast)。其他模塊可被開發(fā)來顯示在內(nèi)容聚集 站點(例如flickr.com)上容宿的照片的幻燈放映。其他模塊可以顯示實時股票報價。在 許多情況下,這些模塊以框架或內(nèi)聯(lián)框架(iframe)的形式出現(xiàn)在基本HTML文檔中,這使得 能夠在基本HTML文檔內(nèi)嵌入另一 HTML文檔。 維護這些可定制頁面的服務提供商可以開發(fā)若干的模塊,用戶可從中選出一些來 添加到其頁面。然而,由于模塊能夠執(zhí)行的功能多種多樣并且用戶的創(chuàng)造力看起來是無限 的,因此一些服務提供商也還提供一種允許每三方開發(fā)模塊的開放開發(fā)環(huán)境。然而,由于在 允許第三方模塊時涉及的安全性問題,服務提供商通常還依賴于某些措施來使有關第三方 模塊的安全性顧慮達到最低限度。具體而言,通過利用文檔對象模型來編寫腳本,網(wǎng)頁的不 同窗口和框架中的內(nèi)容可以按強大的方式來交互。然而,由于瀏覽器客戶端可以在其各種 窗口和框架中同時顯示無關的內(nèi)容,例如基本頁面和一個或多個模塊,因此某些策略必須 被應用來保護數(shù)據(jù)完善性和信息的隱密。如果不采取安全性措施,那么在一個框架中執(zhí)行 的模塊可能能夠獲知其他模塊或基本文檔中的信息。允許以這種方式自由訪問可能會侵犯 用戶的隱私。因此,大多數(shù)公眾可得的瀏覽器客戶端(例如Mozilla⑧Firefox和Microsoft⑧
Internet Explorer )支持一種域安全性模型,這種模型只允許與來自同一來源(origin) 的內(nèi)容交互。例如,與一個域(例如,http:〃yaho0. com/)相對應的iframe的對象不可訪 問另一框架或基本文檔的內(nèi)容,如果該內(nèi)容源自于另一域(例如,https:〃example. com) 的話。至于JavaScript,例如,為了防止跨站點安全性問題,瀏覽器在javascript對象模型 中施加相同來源策略。也就是說,在一個iframe中運行的腳本不可訪問另一 iframe內(nèi)的 任何對象,除非這些iframe中的頁面都來自同一來源。 一些瀏覽器在下述情況下認為兩個 頁面具有相同的來源如果對于這兩個頁面,協(xié)議、端口 (如果給出的話)和主機都是相同的。在沒有域安全性的情況下,流氓頁面可以窺探另一頁面,訪問其域外的cookie、或者利 用動態(tài)超文本標記語言(DHTML)來操縱內(nèi)容。 服務提供商可以結合第三方模塊利用標準瀏覽器所支持的域安全性模型。例如, 服務提供商可以在對應于與基本文檔以及嵌入在其他iframe中的文檔不同的另一來源或 域的iframe中提供HTML文檔,包括第三方模塊或對第三方模塊的引用(例如,src屬性)。 這樣,給定的第三模塊的操作被有效地包含在其相應iframe的上下文內(nèi)。
發(fā)明內(nèi)容
本發(fā)明提供了用于促進在諸如瀏覽器客戶端之類的實現(xiàn)域安全性模型的用戶代 理所處理的文檔的上下文內(nèi)執(zhí)行的代碼模塊之間的安全、結構化交互的方法、裝置和系統(tǒng)。 在特定實現(xiàn)方式中,被加載到基本文檔中的模塊連接器腳本或對象發(fā)現(xiàn)對應于不同來源或 域的收聽者模塊和發(fā)送者模塊,并在它們之間傳遞信息。這樣,只要讓端用戶將收聽者模塊 和發(fā)送者模塊都添加到一網(wǎng)頁,無需顯式地定義任何形式地互連,收聽者模塊即可以消耗 和使用來自位于同一頁面上的發(fā)送者模塊的信息。例如,照片模塊可以訪問遠程照片共享 站點處的用戶賬戶,并且將一個或多個照片提供給在幻燈放映中呈現(xiàn)照片的模塊。
圖1是示出本發(fā)明的特定實現(xiàn)方式可在其中操作的網(wǎng)絡環(huán)境的示意圖。 圖2示出了可用于實現(xiàn)物理服務器的示例性計算系統(tǒng)體系結構。 圖3是示例性圖形用戶界面。 圖4是示出與基本網(wǎng)頁或文檔相對應的HTML文檔的元素的示例性代碼。 圖5是示出與模塊相對應的HTML文檔的元素的示例性代碼。 圖6至9是示出根據(jù)本發(fā)明的特定實現(xiàn)方式的模塊間通信過程的流程圖。
具體實施例方式
A.示例性網(wǎng)絡系統(tǒng)體系結構 圖1示出了特定實現(xiàn)方式可在其中操作的示例性網(wǎng)絡環(huán)境。如圖1所示,本發(fā)明 的特定實現(xiàn)方式可在包括服務提供商站點30和一個或多個客戶端系統(tǒng)28的網(wǎng)絡環(huán)境中操 作。服務提供商站點30包括容宿著超文本傳送協(xié)議(HTTP)服務器26和網(wǎng)絡應用27的 網(wǎng)絡應用服務器31、操作性地耦合到數(shù)據(jù)庫22的數(shù)據(jù)庫系統(tǒng)20、以及操作性地耦合到模塊 信息的數(shù)據(jù)存儲裝置36的模塊容宿平臺34。路由器27把服務提供商站點30操作性地耦 合到網(wǎng)絡云24。網(wǎng)絡云24—般表示一個或多個互連的網(wǎng)絡,這里描述的系統(tǒng)和主機可通過 這些網(wǎng)絡通信。網(wǎng)絡云24可包括基于分組的廣域網(wǎng)(例如因特網(wǎng))、專用網(wǎng)絡、無線網(wǎng)絡、 衛(wèi)星網(wǎng)絡、蜂窩網(wǎng)絡、尋呼網(wǎng)絡等等。 數(shù)據(jù)庫系統(tǒng)20是一網(wǎng)絡可尋址系統(tǒng),其可容宿數(shù)據(jù)庫應用并可聯(lián)合諸如社交網(wǎng) 絡系統(tǒng)、可定制用戶主頁(例如,my. yahoo.com)等等之類的多種網(wǎng)絡應用操作。 一個或多 個主機可通過計算機網(wǎng)絡訪問數(shù)據(jù)庫系統(tǒng)20。在一種實現(xiàn)方式中,數(shù)據(jù)庫22可存儲各種 類型的信息,例如用戶賬戶信息、用戶配置文件數(shù)據(jù)、地址、偏好、金融賬戶信息。數(shù)據(jù)庫22 還可存儲內(nèi)容,例如數(shù)字內(nèi)容數(shù)據(jù)對象和其他媒體資源。在特定實現(xiàn)方式中,內(nèi)容數(shù)據(jù)對象或內(nèi)容對象是通常存儲或包含在數(shù)據(jù)文件或記錄中的數(shù)字信息的個體項。內(nèi)容對象可采取 許多形式,包括文本(例如,ASCII、SGML、HTML)、圖像(例如,jpeg、tif和gif)、圖形(基 于向量的或者位圖)、音頻、視頻(例如,mpeg)、或者其他多媒體、以及其組合。內(nèi)容對象數(shù) 據(jù)還可包括可執(zhí)行的代碼對象(例如,可在瀏覽器窗口或框架內(nèi)執(zhí)行的游戲)、播客等等。 從結構上來說,數(shù)據(jù)庫22意味著一大類數(shù)據(jù)存儲和管理系統(tǒng)。在特定實現(xiàn)方式中,數(shù)據(jù)庫 22可由包括諸如數(shù)據(jù)庫服務器、大容量存儲介質、媒體庫系統(tǒng)等等之類的組件的任何適當 物理系統(tǒng)來實現(xiàn)。模塊容宿平臺34容宿著由服務提供商站點30內(nèi)部開發(fā)的模塊,以及由 第三方開發(fā)的模塊。數(shù)據(jù)存儲裝置36存儲著模塊定義數(shù)據(jù),例如計算機程序代碼、HTML代 碼、腳本、Adobe⑧Flash (swf)對象,等等。 在特定實現(xiàn)方式中,網(wǎng)絡應用27可以訪問數(shù)據(jù)庫系統(tǒng)20以根據(jù)需要檢索、添加或 修改存儲在其中的數(shù)據(jù)以向一個或多個用戶提供網(wǎng)絡應用,例如社交網(wǎng)絡應用或可定制主 頁。響應于來自給定用戶的對主頁的請求,網(wǎng)絡應用服務器27可訪問數(shù)據(jù)庫系統(tǒng)20,以從 相應的用戶賬戶中檢索出頁面格式和布局信息。布局信息可以標識出用戶已添加到其頁面 的模塊,等等。網(wǎng)絡應用27隨后可訪問模塊容宿平臺34,以獲得或生成用于添加在布局信 息中標識的模塊的HTML代碼和其他內(nèi)容。網(wǎng)絡應用27隨后可將該內(nèi)容合并到基本文檔或 頁面模板中,并將合并的頁面發(fā)送到用戶。 客戶端系統(tǒng)28經(jīng)由網(wǎng)絡服務提供商或任何其他適當?shù)氖侄尾僮餍缘剡B接到網(wǎng) 絡環(huán)境??蛻舳讼到y(tǒng)28可包括個人計算機或移動設備,例如膝上型計算機、個人數(shù)字助 理(PDA)等等??蛻舳讼到y(tǒng)28可包括一個或多個處理器、存儲器、網(wǎng)絡接口、一個或多 個輸入/輸出(I/O)設備以及互連這些組件的系統(tǒng)總線。客戶端系統(tǒng)28還可包括操 作系統(tǒng),以及可操作來與服務提供商站點30交互的用戶代理,例如瀏覽器客戶端。瀏
覽器客戶端可包括Microsoft internet Explorer 、 Mozi 1 la Firefox 、 Apple Safari 、 Netscape Navigator⑧、以及任何其他適當?shù)挠脩舸怼_@種瀏覽器客戶端
支持不允許從不同來源提供的內(nèi)容(例如,內(nèi)容對象和腳本)之間的交互的域安全性模型。 在特定實現(xiàn)方式中,來源被定義為主機名、端口和協(xié)議的組合。主機名可以是IP地址或域 名。端口指的是傳輸控制協(xié)議/因特網(wǎng)協(xié)議(TCP/IP)端口,而協(xié)議指的是傳輸層之上的協(xié) 議層,例如HTTP、 S-HTTP、基于安全套接字層的HTTP(HTTPS)。另外,一些瀏覽器認為IP地 址(例如,66. 213. 145. 93)和解析到該IP地址的域名在結合iframe使用時是不同的來源。
A. 1.示例性服務器系統(tǒng)體系結構 這里描述的服務器主機系統(tǒng)(例如網(wǎng)絡應用服務器31)可以實現(xiàn)在多種計算系統(tǒng) 和體系結構中。另外,客戶端系統(tǒng)28的系統(tǒng)體系結構可與服務器系統(tǒng)體系結構相當類似。 例如,該系統(tǒng)體系結構還可包括I/0系統(tǒng),例如鼠標、鍵盤和顯示設備。以下出于教導而非 限制目的描述示例性計算體系結構。 圖2示出了可用于實現(xiàn)物理服務器的示例性計算系統(tǒng)體系結構。在一個實施例 中,硬件系統(tǒng)200包括處理器202、緩存存儲器204以及涉及這里描述的功能的一個或多個 軟件應用和驅動器。此外,硬件系統(tǒng)200包括高性能輸入/輸出(1/0)總線206和標準1/ 0總線208。主機橋接器210將處理器202耦合到高性能1/0總線206,而1/0總線橋接器 212將兩條總線206和208與彼此耦合。系統(tǒng)存儲器214和網(wǎng)絡/通信接口 216耦合到總 線206。硬件系統(tǒng)200還可包括視頻存儲器(未示出)和耦合到視頻存儲器的顯示設備。大容量存儲設備218以及I/O端口 220耦合到總線208。硬件系統(tǒng)200可以可選地包括鍵 盤和點選設備,以及耦合到總線208的顯示設備(未示出)??傮w上,這些元件想要表示寬 泛的一類計算機硬件系統(tǒng),其中包括但不限于基于由Santa Clara, California的英特爾公 司制造的x86兼容處理器以及由S皿nyvale, California的先進微器件(AMD)公司制造的 x86兼容處理器以及任何其他適當?shù)奶幚砥鞯耐ㄓ糜嬎銠C系統(tǒng)。 下面更詳細描述硬件系統(tǒng)200的元件。具體地,網(wǎng)絡接口 216提供硬件系統(tǒng)200 與諸如以太網(wǎng)(例如,IEEE 802.3)網(wǎng)絡等等之類的多種網(wǎng)絡中的任何一種之間的通信。大 容量存儲設備218提供對執(zhí)行位置服務器22中實現(xiàn)的上述功能的數(shù)據(jù)和編程指令的永久 存儲,而系統(tǒng)存儲器214 (例如,DRAM)在數(shù)據(jù)和編程指令被處理器202執(zhí)行時提供對其的 臨時存儲。IA)端口 220是提供可耦合到硬件系統(tǒng)200的額外外圍設備之間的通信的一個 或多個串行和/或并行通信端口 。 硬件系統(tǒng)200可包括多種系統(tǒng)體系結構;并且硬件系統(tǒng)200的各種組件可被重新 安排。例如,緩存204可以與處理器202 —起在芯片上?;蛘撸彺?04和處理器202可被 封裝在一起作為"處理器模塊",其中處理器202被稱為"處理器核心"。另外,本發(fā)明的某 些實施例可以不需要也不包括所有上述元件。例如,被示為耦合到標準I/O總線208的外 圍設備可以耦合到高性能I/0總線206。此外,在一些實施例中,可能只存在單條總線,并且 硬件系統(tǒng)200的組件耦合到該單條總線。另外,硬件系統(tǒng)200可包括額外的組件,例如額外 的處理器、存儲設備或存儲器。 如下所述,在一種實現(xiàn)方式中,這里描述的一個或多個物理服務器的操作被實現(xiàn) 為由硬件系統(tǒng)200運行的一系列軟件例程。這些軟件例程包括將被硬件系統(tǒng)中的處理器 (例如處理器202)執(zhí)行的多個或一系列指令。最初,該系列指令可被存儲在諸如大容量 存儲設備218之類的存儲設備上。但是,該系列指令也可被存儲在諸如盤、CD-ROM、 ROM、 EEPROM等等之類的任何適當?shù)拇鎯橘|上。另外,該系列指令不需要被存儲在本地,而是可 以經(jīng)由網(wǎng)絡/通信接口 216從諸如網(wǎng)絡上的服務器之類的遠程存儲設備接收。指令被從存 儲設備(例如大容量存儲設備218)拷貝到存儲器214中,然后被處理器202訪問和執(zhí)行。
操作系統(tǒng)管理和控制硬件系統(tǒng)200的操作,其中包括數(shù)據(jù)到軟件應用(未示出) 的輸入和從軟件應用的輸出。操作系統(tǒng)提供了在系統(tǒng)上執(zhí)行的軟件應用與系統(tǒng)的軟件組 件之間的接口。根據(jù)本發(fā)明的一個實施例,操作系統(tǒng)是可從Redmond, Wash.的微軟公司獲 得的Wind0WS⑧95/98/NT/XP/Vista操作系統(tǒng)。但是,本發(fā)明也可結合其他適當?shù)牟僮飨?統(tǒng)使用,所述其他適當?shù)牟僮飨到y(tǒng)例如是可從Cupertino, Calif.的蘋果電腦公司獲得的 Apple Macintosh操作系統(tǒng)、UNIX操作系統(tǒng)、LINUX操作系統(tǒng)等等。當然,其他實現(xiàn)方式也 是可能的。例如,這里描述的服務器功能可利用通過背板通信的多個服務器刀片來實現(xiàn)。
B.模塊間通信功能 圖3示出了在瀏覽器窗口 304內(nèi)呈現(xiàn)的示例性基本網(wǎng)頁302。基本網(wǎng)頁302包括 作為iframe嵌入在基本網(wǎng)頁302中的兩個模塊窗口 306a、306b。圖4示出了瀏覽器客戶 端處理以在瀏覽器窗口 304內(nèi)呈現(xiàn)基本網(wǎng)頁302的基本網(wǎng)頁302的HTML代碼(包括一些 偽代碼)的子集。基本網(wǎng)頁302的HTML代碼包括第一 iframe元素402和第二 iframe元 素404。 "src"元素使得瀏覽器客戶端在iframe的上下文內(nèi)載入與統(tǒng)一資源定位符(URL) 相對應的內(nèi)容。在一種實現(xiàn)方式中,服務提供商站點30從與基本網(wǎng)頁302的來源不同的來
8源提供iframe元素402、404內(nèi)的模塊。出于描述目的,本公開將這種iframe 402、404稱 為模塊iframe。這些iframe是基本網(wǎng)頁302的子元素。例如,與第一模塊(出于教導目 的標注為模塊A)相對應的內(nèi)容可從名為modulehostl. com的主機提供,而第二模塊可從 名為modulehost2. com的主機提供。如圖3所示,基本網(wǎng)頁302是從與http:〃my. yahoo, com/相關聯(lián)的主機提供的。如圖4所示,基本網(wǎng)頁302的HTML代碼還包括模塊連接器腳本 元素406(出于教導目的稱為"管道")。在所示出的實現(xiàn)方式中,模塊連接器腳本是被加載 到頁面中的JavaScript對象。腳本元素406還包括iframe令牌(iFtoken)到模塊標識符 (moduleld)映射信息408。如圖4所示,iframe元素402、404包括標識模塊的標識符(id) (例如,module—A、module—B),而位置(src)串包括標識與給定模塊相對應的令牌值的令牌 (token)參數(shù)(iFtokenA、 iFtokenB,等等)。映射信息408將這些令牌映射到相應的模塊 標識符。模塊連接器腳本可以使用這些映射來確保在一個iframe中執(zhí)行的模塊不能假裝 是另一個模塊。例如,傳遞到模塊連接器腳本的消息可包括令牌,這些令牌可被模塊連接器 腳本用來對照模塊iframe的標識符(id)和令牌到模塊映射信息408驗證消息。在一種實 現(xiàn)方式中,模塊連接器腳本使用這些令牌來標識模塊和消息應當被添加到的消息隊列。其 他實現(xiàn)方式也是可能的。例如,模塊中的一個或多個不需要被可見地呈現(xiàn)在瀏覽器窗口 304中。 圖5示出了與"模塊A"相對應的HTML文檔的示例性HTML代碼(包括一些偽代碼 來表示模塊互連和其他功能)。所示出的代碼完全是用于教導目的的。利用相同或相似的結 構和命令,可以為模塊B載入類似的文檔。如下文中更詳細論述的,模塊可以注冊為發(fā)送者 和收聽者。圖5示出了 HTML代碼包括腳本元素502,該腳本元素502使得信使(messenger) 腳本對象被加載在模塊iframe內(nèi)。信使腳本的數(shù)據(jù)定位符也包括令牌(iFtokenA),該令 牌被服務提供商站點30所接收并與信使腳本包括在一起以使其可將該令牌嵌入在信使 iframe元素中,如下所述。除了其他功能外,信使腳本在被加載和執(zhí)行時可操作以將另一 iframe (這里稱之為"信使iframe")嵌入在模塊iframe內(nèi)。在一種實現(xiàn)方式中,信使腳本 訪問模塊iframe的HTML文檔的對象模型并添加HTML代碼以在運行時創(chuàng)建信使iframe。 信使iframe是模塊iframe的子元素。在一種實現(xiàn)方式中,信使iframe在瀏覽器窗口 304 內(nèi)不可見或者未呈現(xiàn)在瀏覽器窗口 304內(nèi)。以下出于例示目的提供示例性代碼。
〈 iframe src = http://my.yahoo.com/messenger token = iFtokenA#[{.........}, {.........} , {.........} , {.........} , {.........}]> top. conduit, register (window, token); 〈/iframe〉 由于信使iframe元素的src屬性中指示的來源是與基本網(wǎng)頁302相同的來源,因 此基本網(wǎng)頁302的對象可與信使iframe的內(nèi)容相交互。然而,模塊iframe的內(nèi)容不能與 基本網(wǎng)頁302或信使iframe的內(nèi)容相交互。信使iframe元素的src屬性還包括令牌值 (這里是iFtokenA)。如前所述,信使腳本還包括使得信使腳本向基本網(wǎng)頁302的模塊連接 器腳本注冊信使iframe的代碼(top. conduit, register (window, token))。模塊連接器腳 本可使用傳遞給它的令牌以及模塊標識符到令牌映射信息408來識別與信使腳本和信使 iframe相對應的模塊iframe (通過訪問模塊iframe的id屬性)。模塊連接器腳本還可通過
9訪問iframe和信使iframe元素并對照其映射信息408比較它們來驗證注冊消息。另外,模 塊連接器腳本可使用令牌值來識別各種消息應當被添加到的信使iframe消息隊列。信使 iframe元素的srcURL還包括充當消息隊列的經(jīng)編碼串(在#之后)。#號(#)后的串值的 變化不會導致瀏覽器客戶端發(fā)送新請求。在特定實現(xiàn)方式中,該經(jīng)編碼串使用JavaScript 對象記號法(JSON)來實現(xiàn)該消息隊列,其中每個消息是利用JSON語法來劃界的。根據(jù)大多 數(shù)瀏覽器客戶端的域安全性模型,信使腳本可以最初設置信使iframe元素的位置(src), 并且可在信使iframe已被創(chuàng)建之后重置該位置。另外,如果信使iframe元素的位置(src) 被設置成與基本網(wǎng)頁302相同的來源,那么模塊連接器腳本可以訪問該位置(src)和該經(jīng) 編碼串以判定在消息隊列中有哪些消息。模塊連接器腳本還能夠修改消息隊列以添加新消 息并且刪除過期的消息。另外,信使腳本雖然在模塊iframe的上下文內(nèi)操作,但它仍能夠 讀取和修改位置(src)屬性。在其他實現(xiàn)方式中,模塊連接器腳本也可被嵌入在iframe中。 在這種實現(xiàn)方式中,信使腳本將創(chuàng)建出標識與模塊連接器腳本的來源相同的來源(如果不 同于基本網(wǎng)頁302的來源的話)的信使iframe元素。如下所述,信使iframe元素可以響 應于模塊發(fā)送的第一消息而被動態(tài)創(chuàng)建。 另外,信使腳本還可聲明一消息傳送應用編程接口 (API),以允許模塊注冊為發(fā)送 者和接收者,并且發(fā)送和接收消息。消息傳送API也是第三方模塊開發(fā)者可獲得的公開規(guī) 范。消息傳送API使得模塊開發(fā)者可以創(chuàng)建能夠向模塊連接器腳本注冊以及發(fā)送并接收來 自其他模塊的消息的模塊。例如,在圖5的示例性代碼中,模塊包括loadPhotosFromFlickr 函數(shù),該函數(shù)訪問站點flickr. com以獲得去往被上載到用戶賬戶的一個或多個照片的 URL。 advertisePhotos函數(shù)使用信使腳本所聲明的接口來發(fā)送消息。在所示出的實現(xiàn)方 式中,該函數(shù)包括根據(jù)消息傳送API的發(fā)送命令504,該命令使得信使腳本在相應的信使 iframe的位置(src)屬性的消息隊列中發(fā)布照片URL(見下)。在特定實現(xiàn)方式中,模塊連 接器腳本支持多個通道。每個消息標識一通道并且包括要在該通道上發(fā)送的相應數(shù)據(jù)。如 圖5所示,發(fā)送命令502標識被稱為"pictures"的通道。每個通道還與收聽模塊可預期的 輸出格式相關聯(lián)。另外的通道可包括文本、圖片、音樂、視頻等等。例如,圖片通道可要求輸 出是去往照片的URL,而視頻通道可要求輸出是去往視頻的URL。在一種實現(xiàn)方式中,模塊 還可通過在"收聽者"通道上發(fā)出一發(fā)送命令來注冊為一個或多個通道上的收聽者。例如, 根據(jù)一種可能的消息傳送API,模塊開發(fā)者可創(chuàng)建一模塊,該模塊調用具有以下API的接收 函數(shù)receive ("pictures,,, handler),并且定義句柄(例如,handler = function (msg))。 下層的消息傳送實現(xiàn)可以執(zhí)行發(fā)送操作(例如send ((cha皿el: 〃 listener 〃 , data:" pictures" })),以通告模塊收聽特定通道的能力。消息傳送實現(xiàn)存儲指向句柄的 指針以供將來參考,從而當該通道上的消息被接收到時,它可被路由到句柄函數(shù)。這樣,模 塊依賴于接收消息傳送API在收聽者通道上發(fā)出一發(fā)送命令,該發(fā)送命令標識出它可在其 上接收到消息的(一個或多個)通道。接收函數(shù)還為接收到的消息標識出一句柄,即定義 處理該消息的函數(shù)的句柄。例如,如果該消息是去往照片的URL,則該句柄函數(shù)可定義檢索 出該照片并將其添加到被顯示給用戶的幻燈放映的進程。
B. 1.信使腳本_發(fā)送 圖6示出了可被根據(jù)本發(fā)明的一種實現(xiàn)方式的信使腳本實現(xiàn)來從一模塊發(fā)送消 息的方法。信使腳本收聽從在模塊iframe的上下文內(nèi)操作的模塊發(fā)出的發(fā)送命令(602)。響應于發(fā)送命令,信使腳本基于傳遞給它的參數(shù)信息構造消息并創(chuàng)建時間戳(604)。如果信使iframe尚未被創(chuàng)建(606),則信使腳本在信使模塊iframe內(nèi)創(chuàng)建信使iframe元素,將該消息和時間戳以位置(src)屬性的經(jīng)編碼參數(shù)的形式添加到消息隊列(見上)(608)。如果信使iframe已被創(chuàng)建,則信使腳本基于時間戳檢查消息隊列以去除過期的消息(610),并將新消息和時間戳添加到消息隊列(612)。添加到信使iframe的位置(src)屬性的消息隨后可供模塊連接器腳本訪問并讀取。
B. 2.模塊連接器腳本 圖7闡明了根據(jù)本發(fā)明的一種可能的實現(xiàn)方式的模塊連接器腳本所實現(xiàn)的方法。圖7所示的過程流程可以響應于第一信使iframe的注冊而發(fā)起(見上)。如圖7所示,模塊連接器腳本周期性地操作(702),例如每20毫秒操作,以針對任何注冊的信使iframe進行檢查(704)。如果已注冊了任何信使iframe,則模塊連接器腳本針對所有注冊的信使iframe (706)判定是否有任何新的消息被添加到消息隊列(708)。如果是,則模塊連接器腳本針對所有新消息(710)將消息傳遞到在各個消息中指示的通道的任何收聽者(712、714)。 圖8示出了由根據(jù)本發(fā)明的一種可能的實現(xiàn)方式的模塊連接器腳本實現(xiàn)的用于將消息傳遞到收聽者模塊的過程。如圖8所示,模塊連接器腳本訪問與收聽者模塊相對應的信使iframe的位置(src)屬性(802),并且對消息隊列的參數(shù)信息解碼(804)。禾擁消息隊列中的每個消息的時間戳,模塊連接器腳本通過從消息隊列中刪除舊消息而使其過期(806),并且將新消息添加到消息隊列(808)。這樣,在相應收聽者模塊的模塊iframe的上下文內(nèi)操作的信使腳本能夠訪問消息。 其他實現(xiàn)方式也是可能的。例如,模塊連接器腳本的操作可以被端用戶所調整,端
用戶可配置一條或多條規(guī)則,這些規(guī)則限定了給定模塊可與之交互的模塊,或者一模塊可
在其上接收消息的通道。另外,模塊連接器腳本操作的時間間隔可以是固定值,或者可以隨
每次操作而逐漸增大。 B. 3.信使腳本-收聽 圖9示出了可由根據(jù)本發(fā)明一種實現(xiàn)方式的信使腳本實現(xiàn)來收聽消息并將其提供給模塊的方法。如圖9所示,信使腳本執(zhí)行周期性操作的收聽進程(902)。在給定的時間間隔之后,信使腳本對信使iframe的位置(src)屬性解碼以針對消息隊列中的消息進行檢查(904),并將任何新消息傳遞給被注冊來接收消息的句柄(見上)(906)。這樣,模塊可接收一個或多個消息并對其進行處理以例如生成在瀏覽器窗口 304內(nèi)呈現(xiàn)的輸出。此外,用于模塊間通信的結構化機制使得模塊可以在仍保持安全性的同時進行交互,因為模塊只具有這里公開的手段用來與其他頁面對象通信和交互。 已經(jīng)參考特定實施例說明了本發(fā)明。例如,雖然本發(fā)明的實施例已被描述為結合HTML、HTTP和JavaScript操作,但是本發(fā)明可以結合任何適當?shù)膮f(xié)議環(huán)境使用。其他實施例對于本領域的普通技術人員來說是顯而易見的。因此,除了所附權利要求所指示的之外,不希望本發(fā)明受限制。
權利要求
一種方法,包括在第一來源處接收來自用戶代理的對網(wǎng)頁的請求,其中該用戶代理能夠操作來實現(xiàn)域安全性模型,該域安全性模型不允許跨內(nèi)聯(lián)框架的來自不同來源的內(nèi)容之間的交互;訪問布局信息的數(shù)據(jù)存儲位置來識別出一個或多個模塊對象以添加到基本文檔;以及從所述第一來源發(fā)送所述基本文檔到所述用戶代理,其中所述基本文檔包括一個或多個模塊內(nèi)聯(lián)框架元素,這一個或多個模塊內(nèi)聯(lián)框架元素中的每一個能夠操作來使得所述用戶代理在一內(nèi)聯(lián)框架內(nèi)加載來自第二來源的模塊文檔,其中該模塊文檔包括一信使對象和一個或多個所識別出的模塊對象;其中每個信使對象在所述用戶代理的上下文內(nèi)能夠操作來在相應的模塊內(nèi)聯(lián)框架內(nèi)創(chuàng)建信使內(nèi)聯(lián)框架元素,該信使內(nèi)聯(lián)框架元素包括標識所述第一來源的位置屬性;響應于由模塊對象發(fā)送的消息,將該消息添加到該位置屬性;以及把在該信使內(nèi)聯(lián)框架元素的位置屬性中檢測到的新消息提供給模塊對象;其中所述基本文檔還包括模塊連接器對象,該模塊連接器對象在所述用戶代理的上下文內(nèi)能夠操作來訪問一個或多個信使內(nèi)聯(lián)框架元素的位置屬性以針對新消息進行檢查;以及響應于新消息,將該新消息添加到相應的信使內(nèi)聯(lián)框架元素的一個或多個位置屬性。
2. 如權利要求1所述的方法,其中,信使對象還能夠操作來向模塊連接器對象注冊。
3. 如權利要求1所述的方法,其中,信使對象還能夠操作來定義到模塊對象的消息傳 送應用編程接口。
4. 如權利要求1所述的方法,其中,信使對象還能夠操作來使先前添加到信使內(nèi)聯(lián)框 架元素的位置屬性的消息過期。
5. 如權利要求1所述的方法,其中,模塊連接器對象還能夠操作來使先前添加到信使 內(nèi)聯(lián)框架元素的位置屬性的消息過期。
6. 如權利要求1所述的方法,其中,模塊連接器對象還能夠操作來注冊為一通道上的 收聽者;并且模塊對象能夠操作來依據(jù)新消息的通道和在該通道上注冊的收聽者來選擇性 地把新消息添加到相應信使內(nèi)聯(lián)框架元素的一個或多個位置屬性。
7. 如權利要求1所述的方法,其中,所述第一來源和第二來源是相對于主機名、端口和 協(xié)議的組合來定義的。
8. 如權利要求1所述的方法,其中,所述請求標識一用戶,并且所述布局信息是從與該 用戶相關聯(lián)的用戶賬戶訪問的。
9. 一種裝置,包括 網(wǎng)絡接口 ; 存儲器;一個或多個處理器;以及網(wǎng)絡應用程序邏輯,包括一個或多個計算機可讀指令,這一個或多個計算機可讀指令 在被執(zhí)行時能夠操作來使得該一個或多個處理器在第一來源處接收來自用戶代理的對網(wǎng)頁的請求,其中該用戶代理能夠操作來實現(xiàn)域 安全性模型,該域安全性模型不允許跨內(nèi)聯(lián)框架的來自不同來源的內(nèi)容之間的交互;訪問布局信息的數(shù)據(jù)存儲位置來識別出一個或多個模塊對象以添加到基本文檔;以及 從所述第一來源發(fā)送所述基本文檔到所述用戶代理,其中所述基本文檔包括一個或多 個模塊內(nèi)聯(lián)框架元素,這一個或多個模塊內(nèi)聯(lián)框架元素中的每一個能夠操作來使得所述用 戶代理在一內(nèi)聯(lián)框架內(nèi)加載來自第二來源的模塊文檔,其中該模塊文檔包括一信使對象和 一個或多個所識別出的模塊對象;其中每個信使對象在所述用戶代理的上下文內(nèi)能夠操作來在相應的模塊內(nèi)聯(lián)框架內(nèi)創(chuàng)建信使內(nèi)聯(lián)框架元素,該信使內(nèi)聯(lián)框架元素包括標識所述第一來源的位置屬性;響應于由模塊對象發(fā)送的消息,將該消息添加到該位置屬性;以及把在該信使內(nèi)聯(lián)框架元素的位置屬性中檢測到的新消息提供給模塊對象;其中所述基本文檔還包括模塊連接器對象,該模塊連接器對象在所述用戶代理的上下文內(nèi)能夠操作來訪問一個或多個信使內(nèi)聯(lián)框架元素的位置屬性以針對新消息進行檢查;以及 響應于新消息,將該新消息添加到相應的信使內(nèi)聯(lián)框架元素的一個或多個位置屬性。
10. 如權利要求9所述的方法,其中,信使對象還能夠操作來向模塊連接器對象注冊。
11. 如權利要求9所述的方法,其中,信使對象還能夠操作來定義到模塊對象的消息傳 送應用編程接口。
12. 如權利要求9所述的方法,其中,信使對象還能夠操作來使先前添加到信使內(nèi)聯(lián)框 架元素的位置屬性的消息過期。
13. 如權利要求9所述的方法,其中,模塊連接器對象還能夠操作來使先前添加到信使 內(nèi)聯(lián)框架元素的位置屬性的消息過期。
14. 如權利要求9所述的方法,其中,模塊連接器對象還能夠操作來注冊為一通道上的 收聽者;并且模塊連接器對象能夠操作來依據(jù)新消息的通道和在該通道上注冊的收聽者來 選擇性地把新消息添加到相應信使內(nèi)聯(lián)框架元素的一個或多個位置屬性。
15. 如權利要求9所述的方法,其中,所述第一來源和第二來源是相對于主機名、端口 和協(xié)議的組合來定義的。
16. 如權利要求9所述的方法,其中,所述請求標識一用戶,并且所述布局信息是從與 該用戶相關聯(lián)的用戶賬戶訪問的。
17. —種方法,包括實現(xiàn)域安全性模型,該域安全性模型不允許跨內(nèi)聯(lián)框架的來自不同來源的內(nèi)容之間的 交互;從第一來源接收并呈現(xiàn)基本文檔,其中該基本文檔包括一個或多個模塊內(nèi)聯(lián)框架元素;對于每個模塊內(nèi)聯(lián)框架元素,在內(nèi)聯(lián)框架內(nèi)從各自的第二來源加載一模塊文檔,其中 該模塊文檔包括一信使對象和一個或多個所識別出的模塊對象; 其中每個信使對象能夠操作來在相應的模塊內(nèi)聯(lián)框架內(nèi)創(chuàng)建信使內(nèi)聯(lián)框架元素,該信使內(nèi)聯(lián)框架元素包括標識所述 第一來源的位置屬性;響應于由模塊對象發(fā)送的消息,將該消息添加到該位置屬性;以及把在該信使內(nèi)聯(lián)框架元素的位置屬性中檢測到的新消息提供給模塊對象; 其中所述基本文檔還包括模塊連接器對象,該模塊連接器對象能夠操作來 訪問一個或多個信使內(nèi)聯(lián)框架元素的位置屬性以針對新消息進行檢查;以及 響應于新消息,將該新消息添加到相應的信使內(nèi)聯(lián)框架元素的一個或多個位置屬性。
18. 如權利要求17所述的方法,其中,所述第一來源和各自的第二來源是相對于主機 名、端口和協(xié)議的組合來定義的。
19. 如權利要求17所述的方法,還包括定義能夠訪問模塊對象的消息傳送應用編程接□。
20. 如權利要求17所述的方法,還包括向模塊連接器對象注冊信使對象。
全文摘要
用于促進在諸如瀏覽器客戶端之類的實現(xiàn)域安全性模型的用戶代理所處理的文檔的上下文內(nèi)執(zhí)行的代碼模塊之間的安全、結構化交互的方法、裝置和系統(tǒng)。在特定實現(xiàn)方式中,被加載到基本文檔中的模塊連接器腳本或對象發(fā)現(xiàn)對應于不同來源或域的收聽者模塊和發(fā)送者模塊,并在它們之間傳遞信息。這樣,只要讓端用戶將收聽者模塊和發(fā)送者模塊都添加到一網(wǎng)頁,無需顯式地定義任何形式地互連,收聽者模塊即可以消耗和使用來自位于同一頁面上的發(fā)送者模塊的信息。例如,照片模塊可以訪問遠程照片共享站點處的用戶賬戶,并且將一個或多個照片提供給在幻燈放映中呈現(xiàn)照片的模塊。
文檔編號G06Q50/00GK101790747SQ200880104883
公開日2010年7月28日 申請日期2008年8月11日 優(yōu)先權日2007年8月27日
發(fā)明者羅歐·池吉瓦, 艾薩克·阿爾弗雷德·亨利·瓦斯勒斯基 申請人:雅虎公司