Я сталкиваюсь с вопросами политики того-же-источника в JavaScript. Я читал об обходном решении для этого использования document.domain
переменная, но я не могу заставить обходное решение работать. Обходное решение состоит в том, что Вы, как предполагается, можете установить document.domain
кому: 'example.com'
так, чтобы, если Вы выполняете код от foo.example.com
это может загрузить данные через XHR от bar.example.com
.
Детали об обходном решении здесь:
https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript
Мой пример кода - который не приводит к желаемым результатам - выполняется от URL как http://foo.example.com/
:
Result:
Вывод из этого кода:
Result: Error loading page: 0
Если я изменяюсь url
кому: 'http://foo.example.com/'
, все работает правильно. В моем примере кода существует ли ошибка?
Я не хочу использовать прокси, потому что они медленнее, менее эффективны, и увеличат трафик в нашем веб-сервере. Было бы действительно здорово, если бы это обходное решение на самом деле работало. Является это обходное решение "журавлем в небе"?
Поскольку Мик ответил, почему это не работает, я подумал, что поделюсь решением вопроса «как» сделать крест -доменная работа. См. Мое сообщение SO здесь .
document.domain
обеспечивает связь между кадрами/iframe. Не XHR.
<body>
<iframe src="http://bar.example.com/"></iframe>
<script>
document.domain = 'example.com';
var ifr = document.getElementsByTagName('IFRAME')[0];
ifr.onload = function(e){
//will log the string "BODY" in the console
console.log(ifr.contentWindow.document.body.tagName);
};
</script>
</body>
Если удалить строку с document.domain
, чтение содержимого contentWindow вызовет ошибку Same Origin Policy.