0

我正在尝试编写一些 Javascript 来显示基于对不同域上服务器的 HTTP GET 请求的数据。根据我的阅读,由于 SOP(同源政策),这变得很棘手。

我很好奇 snap.com “快照”(网页预览)是如何工作的。这是一个示例页面: http: //premshree.livejournal.com/66129.html

有人可以解释这是怎么可能的吗?要启用 snap.com 的“快照”,您只需在标题中添加一些 Javascrpt。示例网页似乎违反了 SOP。

4

2 回答 2

1

“快照”JavaScript 托管在 snap.com 上,因此它可以访问 snap.com 的所有内容,即页面预览,因为它实际上遵守同源策略。但是,它不能对 livejournal.com 上的任何页面进行任何调用。

希望这可以帮助。

于 2009-01-26T14:21:51.207 回答
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 调用。scriptjQuery 插入一个指向您尝试从中获取数据的 URL 的标记,而不是进行 AJAX 调用。当脚本加载时,你的回调函数就会被执行,瞧!- 你有 JSON 数据!该技术有 3 个先决条件。

  1. 您尝试从中请求数据的服务返回 JSON(默认情况下或使用参数请求)。
  2. 该服务通过允许您指定用于包装 JSON 数据的回调函数来支持 JSONP。
  3. 您足够信任这个外部资源,以允许他们的代码在您的站点上执行。
于 2009-02-05T19:00:04.067 回答