一个jQuery实例,两个域

One jQuery Instance, Two Domains

本文关键字:两个 jQuery 实例 一个      更新时间:2023-09-26

我有两个页面:a.example.comb.example.comTR

a.example.com包括jQuery

a.example.com包含一个指向b.example.comTR的iframe

两个页面都将document.domain设置为同一父域,example.com

如何使用a.example.com中的jQuery-include从b.example.comframe内部调用$.ajax({url:"b.example.com"})?

换句话说:两个页面目前都可以访问彼此的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>

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

在example.com文档中,使用以下JavaScript函数:

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

然后在b.example.com文档中,使用b.example.com.

中定义的回调函数调用a.example.com文档的makeAjaxRequest的脚本