Я просто хочу добавить, что возможно передавать данные из окна с одним доменом в окно с другим доменом через свойство window.name
.Конечно, это свойство не предназначалось для этой цели, и языковые пуристы возненавидят меня за это .Тем не менее, вот как это делается, быстро и грязно:
В домене X:
var PREFIX = "your prefix here";
// The second parameter of window.open() sets window.name of the child window.
// Encode JSON and prepend prefix.
window.open("http://domain-y.example.com/", PREFIX + JSON.stringify({"foo":"bar", "abc":123}));
В домене Y:
var PREFIX = "your prefix here";
if(window.name.substr(0, PREFIX.length) == PREFIX){
// Remove prefix and decode JSON
var data = JSON.parse(window.name.substring(PREFIX.length));
// Do what you need to do with the data here.
alert(data.foo); // Should alert "bar"
}
PREFIX
является необязательным, но я предпочитаю включать его в случае, если к домену Y обращается какая-то другая страница, которая устанавливает свойство window.name
.Также обратите внимание, что вам не нужно использовать JSON (и не следует, если вы имеете дело с браузерами динозавров), но мне нравится JSON, потому что я могу передать более одного свойства в объекте.
РЕДАКТИРОВАТЬ: Если вам нужен домен Y для передачи данных обратно в домен X, вы можете сохранить в домене Y данные в window.name
и перейти на страницу прохожего в домене X, которая может легко передавать данные в исходное окно.Попробуйте это:
На домене Y:
// Somewhere earlier in the code:
var PREFIX = "your prefix here";
// Call this function when the Done button is clicked.
function passDataBack(data){
window.name = PREFIX + JSON.stringify(data);
window.location = "http://www.domain-x.com/passer.html";
}
На http://www.domain -x.com / passer.html :
// Somewhere earlier in the code:
var PREFIX = "your prefix here";
if(window.name.substr(0, PREFIX.length) == PREFIX){
// Remove prefix and decode JSON
var data = JSON.parse(window.name.substring(PREFIX.length));
// Send data to parent window
window.opener.processData(data);
}
На исходной странице должна быть функция с именем processData
, которая берет данные и что-то с ними делает.