document.domain
метод
Обратите внимание, что это метод iframe, который устанавливает значение document.domain в суффикс текущего домена. Если это так, более короткий домен используется для последующих проверок происхождения. Например, предположим, что скрипт в документе at http://store.company.com/dir/other.html
выполняет следующий оператор:
document.domain = "company.com";
После выполнения этого оператора страница пройдет проверку источника с http://company.com/dir/page.html
. Однако, по тем же соображениям, company.com не мог установить document.domain
в othercompany.com
.
С помощью этого метода вам будет разрешено извлекать javascript из iframe, созданного на поддомене, на странице, созданной в основном домене. Этот метод не подходит для междоменных ресурсов, так как браузеры, такие как Firefox, не позволят вам перейти на document.domain
полностью чужой домен.
Источник: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
Метод совместного использования ресурсов из разных источников
Обмен ресурсами между источниками (CORS) - это рабочий проект W3C, который определяет, как браузер и сервер должны взаимодействовать при доступе к источникам из разных источников. Основная идея CORS состоит в том, чтобы использовать настраиваемые заголовки HTTP, чтобы браузер и сервер знали достаточно друг о друге, чтобы определить, будет ли запрос или ответ успешным или нет.
Для простого запроса, который использует либо GET
или POST
без каких - либо специальных заголовков и чье тело text/plain
, запрос посылается с дополнительным заголовком называется Origin
. Заголовок Origin содержит источник (протокол, имя домена и порт) запрашивающей страницы, чтобы сервер мог легко определить, должен ли он обслуживать ответ. Origin
Заголовок примера может выглядеть так:
Origin: http://www.stackoverflow.com
Если сервер решает, что запрос должен быть разрешен, он отправляет Access-Control-Allow-Origin
заголовок, отражающий тот же источник, который был отправлен, или, *
если это общедоступный ресурс. Например:
Access-Control-Allow-Origin: http://www.stackoverflow.com
Если этот заголовок отсутствует или происхождение не совпадает, браузер отклоняет запрос. Если все хорошо, то браузер обрабатывает запрос. Обратите внимание, что ни запросы, ни ответы не содержат информацию о файлах cookie.
В своем посте о CORS команда Mozilla предлагает проверить наличие withCredentials
свойства, чтобы определить, поддерживает ли браузер CORS через XHR. Затем вы можете связать с существованием XDomainRequest
объекта все браузеры:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get", "http://www.stackoverflow.com/");
if (request){
request.onload = function() {
// ...
};
request.onreadystatechange = handler;
request.send();
}
Обратите внимание, что для работы метода CORS вам необходим доступ к механике заголовков сервера любого типа, и вы не можете просто получить доступ к сторонним ресурсам.
Источник: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
window.postMessage
метод
window.postMessage
при вызове вызывает MessageEvent
отправку a в целевом окне, когда завершается любой ожидающий сценарий, который должен быть выполнен (например, оставшиеся обработчики событий, если он window.postMessage
вызывается из обработчика событий, предварительно установленные тайм-ауты ожидания и т. д.). MessageEvent
Имеет сообщение типа, data
свойство , которое устанавливается на значение строки первого аргумента , предоставленный window.postMessage
, origin
свойство , соответствующее происхождение основного документа в окне вызывающего window.postMessage
в то время window.postMessage
называло, и source
свойство , которое является окном , из который window.postMessage
называется.
Чтобы использовать window.postMessage
, слушатель события должен быть присоединен:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
И receiveMessage
функция должна быть объявлена:
function receiveMessage(event)
{
// do something with event.data;
}
Внешнее iframe также должно правильно отправлять события через postMessage
:
<script>window.parent.postMessage('foo','*')</script>
Любое окно может получить доступ к этому методу в любом другом окне, в любое время, независимо от местоположения документа в окне, чтобы отправить ему сообщение. Следовательно, любой прослушиватель событий, используемый для получения сообщений, должен сначала проверить личность отправителя сообщения, используя свойства источника и, возможно, источника. Это не может быть недооценено: неспособность проверить origin
и, возможно, source
свойства включает атаки сценариев между сайтами.
Источник: https://developer.mozilla.org/en/DOM/window.postMessage