2009-01-26 77 views
0

我想寫一些JavaScript,顯示基於HTTP GET請求到不同域上的服務器的數據。從我讀過的內容來看,由於SOP(同源策略),這是棘手的。snap.com快照違反相同的政策?

我很好奇snap.com「Snap Shots」(網頁預覽)是如何工作的。以下是一個示例頁面:http://premshree.livejournal.com/66129.html

有人可以解釋這可能嗎?要啓用snap.com「Snap Shots」,您只需將一些Javascrpt添加到標題中即可。看起來這個示例網頁不符合SOP。

回答

1

「Snap Shots」JavaScript託管在snap.com上,因此它可以訪問snap.com的所有內容,即頁面預覽,因爲它實際上遵守同源策略。但是,它不能在livejournal.com上打電話給任何頁面。

希望這會有所幫助。

1

按照Ian的回答,您可以使用JSONP讓AJAX跨越由SOP提供的域障礙。什麼是JSONP?這是相同的JSON對象,我們都知道和喜愛,但它是包裹着一個功能: JSON:

 
{ 
    prop1: "a", 
    prop2: 7 
}

JSONP:

 
myfunction(
{ 
    prop1: "a", 
    prop2: 7 
}); 
正如你所看到的,JSON對象作爲參數傳遞 myfunction功能。因此,如果您要使用簡單的 script標記鏈接到託管在其他域上的腳本資源,並且該資源返回了JSONP數據,那麼您可以簡單地定義一個函數 myfunction,該函數接受JSON對象,然後對其執行操作。 JQuery支持使用 getJSON方法的JSONP Ajax調用。 jQuery並沒有進行AJAX調用,而是插入一個 script標記,指向您嘗試從中獲取數據的URL。當腳本加載時,你的回調函數被執行,瞧! - 你有JSON數據!這項技術有3個先決條件。

  1. 您嘗試請求數據的服務將返回JSON(默認情況下或使用參數請求)。
  2. 該服務支持JSONP,允許您指定包裝JSON數據的回調函數。
  3. 您相信此外部來源足以讓他們的代碼在您的網站上執行。