Как перезагрузить http window.opener из всплывающего окна https? - PullRequest
0 голосов
/ 10 августа 2010

У меня есть окно http, которое открывает безопасное всплывающее окно для отправки формы на сторонний веб-сайт. После того, как всплывающее окно закрыто, я бы хотел перезагрузить открыватель, чтобы он отражал результаты отправки формы.

Поскольку средство открытия и всплывающее окно используют разные протоколы (http и https), я не могу сделать это простым способом (window.opener.location.reload ()). Есть ли другой способ? Должен ли я рисковать в JSONP?

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Непонятный способ: установите тайм-аут, чтобы проверить, закрыто ли открытое всплывающее окно.

function checkClosed(){
    if(new_win.closed){
        alert('Window was closed');
    }
    else{
       window.setTimeout(checkClosed,1000);
    }
} 

new_win = window.open('about:blank');
window.setTimeout(checkClosed,1000);
1 голос
/ 19 марта 2017

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

$('a#popup').on('click', function(event) {
    event.preventDefault();
    $this = $(this);
    authenticationWindow = window.open($this.href, 'authenticationPopup');
});

window.addEventListener('message', function (evt) {
    // simplified, should check for matching event.origin
    if (event.data == 'OK' && event.origin == window.location.protocol+'//'+window.location.host) {
        authenticationWindow.close();
    }
});

В то время как из всплывающего окна (конечно, если вы управляете им, по крайней мере, на последней странице) вам нужно это:

opener.postMessage('OK', window.location.protocol+'//'+window.location.host);

Это закроет всплывающее окно и позволит вам делать другие вещи, такие как обновление данных через Ajax или перезагрузить страницу.

...