我正在尝试编写一些Javascript,它将基于HTTP GET请求的数据显示给不同域上的服务器。从我读过的内容来看,由于SOP(同源策略),这很棘手。
我很好奇snap.com“Snap Shots”(网页预览)是如何工作的。以下是一个示例页面:http://premshree.livejournal.com/66129.html
有人可以解释一下这是怎么回事吗?要启用snap.com“快照”,您只需在标题中添加一些Javascrpt即可。似乎示例网页不遵守SOP。
答案 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个先决条件。