snap.com快照违反了相同的Orgin政策?

时间:2009-01-26 07:44:49

标签: javascript ajax cross-domain

我正在尝试编写一些Javascript,它将基于HTTP GET请求的数据显示给不同域上的服务器。从我读过的内容来看,由于SOP(同源策略),这很棘手。

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

有人可以解释一下这是怎么回事吗?要启用snap.com“快照”,您只需在标题中添加一些Javascrpt即可。似乎示例网页不遵守SOP。

2 个答案:

答案 0 :(得分:1)

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

希望这有帮助。

答案 1 :(得分:1)

根据Ian的回答,您可以让AJAX跨越SOP使用JSONP提供的域屏障。什么是JSONP?它是我们都知道和喜爱的相同JSON对象,但它包含一个函数: JSON:

{
  prop1: "a",
  prop2: 7
}

JSONP:

myfunction(
{
  prop1: "a",
  prop2: 7
});
如您所见,JSON对象作为参数传递给myfunction函数。因此,如果您使用简单的script标记链接到托管在不同域上的脚本资源,并且该资源返回了JSONP数据,那么您可以简单地定义一个接受JSON的函数myfunction对象,然后用它做一些事情。 JQuery使用getJSON方法支持JSONP Ajax调用。 jQuery不是进行AJAX调用,而是插入一个script标记,指向您尝试获取数据的URL。当脚本加载时,您的回调函数将被执行,瞧! - 你有JSON数据!这项技术有3个先决条件。

  1. 您尝试请求数据的服务返回JSON(默认情况下或使用参数请求时)。
  2. 该服务支持JSONP,允许您指定一个回调函数来包装JSON数据。
  3. 您信任此外部资源足以允许其代码在您的网站上执行。