一个jQuery实例,两个域

时间:2012-01-10 22:45:22

标签: javascript jquery ajax xss

我有两个页面: a.example.com b.example.com

a.example.com 包含jQuery

a.example.com 包含指向 b.example.com 的iframe

这两个页​​面都将document.domain设置为相同的父域 example.com

如何使用 a.example.com 中的jQuery包含从内部调用$ .ajax({url:“ b.example.com ”}) b.example.com iframe?

换句话说:两个页面当前都可以访问彼此的Javascript,但是我无法在不抛出XSS错误的情况下使AJAX调用。也就是说,不在b.example.com上也包含jQuery。如何避免两次包含jQuery?

iframe的内容示例:

<script>
document.domain = "example.com";

function proxyAjax() {
   var jQueryParent = parent.$.sub();

   // Chrome gives error: XMLHttpRequest cannot load http://b.example.com/. Origin http://a.example.com/ is not allowed by Access-Control-Allow-Origin.
   jQueryParent.ajax({
      url : "http://b.example.com/",
      success : function() {
         console.debug("Success");
      }
   });
}

proxyAjax();
</script>

1 个答案:

答案 0 :(得分:1)

设置document.domain将不允许您进行跨域AJAX调用。如果您真的不需要来自b.example.com的请求,您可以这样做:

在a.example.com文档中,有这个JavaScript函数:

function makeAjaxRequest(callback) {
    $.ajax({ url: '...', success: callback })
}

然后在b.example.com文档中,使用b.example.com中定义的回调函数,在a.example.com文档中调用makeAjaxRequest的脚本。