跨域网站推广

时间:2010-08-11 11:44:06

标签: javascript cross-domain jsonp

我想为我的用户提供一种在他们的网站上宣传我的网站,博客等的方法。 我可以制作横幅,标识他们可以嵌入到他们网站的任何内容,但我想提供动态内容,例如“我的博客中的5个最新条目的标题”。

问题是相同的原产地政策。我知道有一个解决方案(我使用它):它们嵌入了一个简单的div和一个JavaScript文件。 JS向我的服务器发出一个XmlHttpRequest,并将数据作为JSONP获取,解析数据并插入div。

但这是唯一的方法吗?难道我没有更好的办法吗? 在互联网上有大量的小部件(或其他什么,我不知道他们如何调用......)从另一个域获取数据。他们是怎么做到的?

4 个答案:

答案 0 :(得分:0)

许多解决方案的一个共同主题,而 正在使用JavaScript来调用代理 程序(在客户端或服务器上),而这些程序又是为您调用Web服务。

输出可以写入响应流,然后通过正常通道可用,例如XMLHttpRequest的responseText和responseXML属性。

你可以在这里找到更多解决方案:

http://developer.yahoo.com/javascript/howto-proxy.html

或在这里:

http://www.simple-talk.com/dotnet/asp.net/calling-cross-domain-web-services-in-ajax/

答案 1 :(得分:0)

CORS与JSONP不同。 普通的AJAX。您的服务器所要做的就是设置一个特定的标头:Access-Control-Allow-Origin

更多信息:http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

答案 2 :(得分:0)

如果您使用JSONP路线,您将隐含地要求您的用户信任您,因为他们将为您提供对其网页资源的完全访问权限(内容,Cookie,...)。如果他们知道他们主要抱怨。

如果你去iframe路线就没有问题了。
今天,iframe的嵌入式内容的一个着名例子是facebook的Like按钮。

使用代理或其他方法制作服务器端会复杂得多,因为那里有很多环境。我不知道其他方式。

答案 3 :(得分:0)

您还可以在服务器端设置HTTP Access-Control标头。这样,您基本上可以从服务器端控制是否允许触发XMLHttpRequest的客户端处理响应。任何最近(和体面的)webbrowser都会采取相应的行动。

这是一个以PHP为目标的示例,说明如何相应地设置标头。

header('Access-Control-Allow-Origin: *'); // Everone may process the response.
header('Access-Control-Max-Age: 604800'); // Client may cache this for one week.
header('Access-Control-Allow-Methods: GET, POST'); // Allowed request methods.

关键是Access-Control-Allow-Origin: *。这通知客户端允许来自*(实际上,无处不在)的请求处理响应。如果您将其设置为例如Access-Control-Allow-Origin: http://example.com,那么webbrowser可能只在从提到的域提供初始页面时处理响应。

另见: