Передача данных из родительского окна одного домена в дочернее окно другого домианина - PullRequest
2 голосов
/ 16 мая 2011

У меня есть два домена, скажем, X и Y, оба находятся на разных серверах с разными IP-адресами.

Теперь дело в том, что на одной странице домена X есть ссылка, которая открывает всплывающее окно домена Y.

Пользователь ищет некоторые данные в этом всплывающем окне и затем нажимает "Готово "

При нажатии значения, относящиеся к искомому полю, должны быть переданы на страницу домена X.

Для этого я использую PHP, HTML и js.

PS: Это работает, когда доменное имя совпадает, но я хочу решение, где доменные имена и сервер разные.

Ответы [ 3 ]

7 голосов
/ 29 ноября 2013

Я просто хочу добавить, что возможно передавать данные из окна с одним доменом в окно с другим доменом через свойство 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, которая берет данные и что-то с ними делает.

2 голосов
/ 16 мая 2011

Вам необходимо изучить

CORS (для более старых IE вам понадобится XDR ) или

обмен сообщениями в окне или

JSONP или

отправьте переменные через URL

1 голос
/ 12 июля 2016

Я знаю, что это старый вопрос, но я думаю, что это может быть более подходящим ответом на вопрос

Вы должны добавить следующий код в http://domain-x.com

window.addEventListener("message", function(event) {
  console.log(event.data); // {user: 'data'}
}, false);

... на http://domain-y.com

userClicksDone() {
  try {
    // This may throw an error in case of people access
    // http://domain-y.com directly, not via popup from
    // http://domain-x.com
    //
    window.opener.postMessage({user: 'data'}, 'http://domain-x.com');
  } catch(e) { }

  // Closes this popup
  //
  window.close();
}

Больше информации на Mozilla . Кредиты @ mplungjan

...