我正在尝试编写一些 Javascript 来显示基于对不同域上服务器的 HTTP GET 请求的数据。根据我的阅读,由于 SOP(同源政策),这变得很棘手。
我很好奇 snap.com “快照”(网页预览)是如何工作的。这是一个示例页面: http: //premshree.livejournal.com/66129.html
有人可以解释这是怎么可能的吗?要启用 snap.com 的“快照”,您只需在标题中添加一些 Javascrpt。示例网页似乎违反了 SOP。
我正在尝试编写一些 Javascript 来显示基于对不同域上服务器的 HTTP GET 请求的数据。根据我的阅读,由于 SOP(同源政策),这变得很棘手。
我很好奇 snap.com “快照”(网页预览)是如何工作的。这是一个示例页面: http: //premshree.livejournal.com/66129.html
有人可以解释这是怎么可能的吗?要启用 snap.com 的“快照”,您只需在标题中添加一些 Javascrpt。示例网页似乎违反了 SOP。
“快照”JavaScript 托管在 snap.com 上,因此它可以访问 snap.com 的所有内容,即页面预览,因为它实际上遵守同源策略。但是,它不能对 livejournal.com 上的任何页面进行任何调用。
希望这可以帮助。
按照 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 调用。script
jQuery 插入一个指向您尝试从中获取数据的 URL 的标记,而不是进行 AJAX 调用。当脚本加载时,你的回调函数就会被执行,瞧!- 你有 JSON 数据!该技术有 3 个先决条件。