Как получить доступ из всплывающего окна кросс-сайта в window.opener?

Я создаю виджет, и мне нужно перенаправить родительское окно на определенный URL-адрес, после определенного события в всплывающем окне, на базе другого домена. Как это можно сделать.

window.opener.location.replace(url);

Ответ 1

Вы просто не можете этого сделать. Межсайтовый скриптинг не разрешен в большинстве браузеров.

Вы можете, однако, обмениваться информацией с другим окном посредством обмена сообщениями с несколькими документами, описанными здесь: https://developer.mozilla.org/en/DOM/window.postMessage

Самое большее, что вы можете, это отправить сообщение от всплывающего окна на открыватель и прослушать такое сообщение в открывателе. Затем открыватель должен самостоятельно изменить свое местоположение.

// popup:
window.opener.postMessage('replace your location', '*');

// opener:
window.onmessage = function (e) {
  if (e.data === 'replace your location') {
    window.location.replace(...);
  }
};

Ответ 2

В определенных ситуациях это можно сделать, но только с разными подобластями, а не с совершенно разными доменами. См. Межсайтовый скриптинг в том же домене, разные поддомены.

Но так как postMessage() широко доступен в текущих браузерах, вы всегда должны предпочитать postMessage(), как предлагает @ian-kuca.