Один экземпляр jQuery, два домена - PullRequest
4 голосов
/ 11 января 2012

У меня есть две страницы: a.example.com и b.example.com

a.example.com включает jQuery

a.example.com содержит iframe, указывающий на b.example.com

на обеих страницах для document.domain задан один родительский элементдомен, example.com

Как использовать jQuery от a.example.com для вызова $ .ajax ({url: " b.example.com"}) изнутри b.example.com iframe?

Другими словами: обе страницы в настоящее время могут получать доступ к Javascript друг другу,но я не могу получить вызов AJAX для функции без выдачи ошибок XSS.То есть без включения jQuery на b.example.com тоже.Как мне избежать включения 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 Ответ

1 голос
/ 11 января 2012

Настройка document.domain не позволит вам совершать междоменные вызовы AJAX.Если вам не требуется, чтобы запрос исходил от b.example.com, вы можете сделать это:

В документе a.example.com используйте эту функцию JavaScript:

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

Затем в документе b.example.com есть скрипт, который вызывает makeAjaxRequest в документе a.example.com с функцией обратного вызова, определенной в b.example.com.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...