0

我为我的网站成员构建了一个内容储物柜小部件。内容储物柜会强制访问者在重定向之前完成调查。

基本上,如果调查完成,我需要让 Javascript 向我的域发出 Ajax 请求并重定向用户。假设一个 PHP 脚本将回显“1”表示完整,“0”表示不完整。

这通常是微不足道的,但用户将 javascript 代码放在他们的网站上,而不是我的。所以我担心遇到跨脚本标志。

那么内容储物柜是如何做到这一点的呢?我知道这是可能的,因为像 Adscend Media 这样的公司有一个。

此外,在我的网站上设计了他们的小部件之后,他们在他们的网站上放置了一个代码,如下所示:

<script type="text/javascript" src="http://mywebsite.com/js/w.php?i=6PS0D9"></script>

这在 head 标签中。由于脚本本身在我的域中,因此包含此脚本是否会以某种方式使跨脚本到我的域可用?

谢谢你的帮助。

4

1 回答 1

1

您关心的基本问题是“同源策略”,这是所有主要浏览器都遵循的策略,以防止网站向其他域发出 AJAX 请求。

但是,同源策略并不限制标签引入的脚本<script>,这就是为什么内容柜能够毫无问题地提供他们想要的任何脚本文件。顺便说一句,这也是同源策略的“JSONP”解决方法的工作原理。

如果您想允许您的客户向您的网站提出跨域请求,您可以将他们的域名添加到您网站上的特殊“crossdomain.xml”文件中,并且(当前)浏览器将允许这些请求工作(我忘了文件的名称/路径,但如果您有兴趣查看此处了解更多信息,应该很容易查找:https: //support.ookla.com/entries/21097566-what-is-crossdomain-xml-以及为什么我需要它)。

或者,您的客户可以在他们的服务器上设置代理(可能不是他们想做的事情)。或者,您可以只使用 JSONP,这基本上是:

  1. 您的用户运行的 JS 将脚本标签添加到页面;该脚本标签的网址类似于“yoursite.com/shouldILetThisGuyIn/”。
  2. 您的服务器将它们发送回一个 JS 文件,其中包含类似的内容var letThisGuyIn = true; function foo() { return letThisGuyIn }
  3. 你的用户运行'foo()',并得到结果,决定是否让那个人进来。
于 2012-12-03T21:24:54.157 回答