Как ссылаться на всплывающий объект при открытии страницы?

Это сводит меня с ума!

Сценарий:

Главная страница открывает всплывающее окно, а затем вызывает в нем функцию:

newWin = window.open(someurl,'newWin',options);

... немного кода позже...

newWin.remoteFunction(options);

и это нормально.

Теперь всплывающее окно все еще открыто, и главная страница изменяется на страницу 2. На странице 2 newWin больше не существует, и мне нужно заново создать ссылку на объект всплывающего окна, чтобы снова вызвать удаленную функцию (newWin.remoteFunction)

Я попробовал что-то вроде:

newWin = open('','newWin', options);
if (!newWin || newWin.closed || !newWin.remoteFunction) {
    newWin = window.open(someurl,'newWin',options);
}

И это работает, я могу снова вызвать newWin.remoteFunction, НО Safari по какой-то причине отдает Focus() всплывающему окну каждый раз, когда метод open() вызывает нарушение навигации (мне абсолютно необходимо, чтобы всплывающее окно работало в фоновом режиме).

Единственный обходной путь, который я могу решить, это создать интервал во всплывающем окне:

if(window.opener && !window.opener.newWin) window.opener.newWin = self;

а затем установите еще один интервал в открывающей странице с некоторыми попытками / уловами, но это не элегантно и очень неэффективно.

интересно, действительно ли так сложно получить ссылку на всплывающий объект между разными страницами в окне открывателя?

1 ответ

Решение

Еще не проверено, просто для идеи:

в главном окне:

window.onbeforeunload = newWin.sendYourself();

в всплывающем окне:

function sendYourself() {
    sendingMyself= setInterval('sendMyself',50);
}
function sendMyself() {
    if(window.opener && !window.opener.newWin) window.opener.newWin = self;
}
function okGotIt() {
    clearInterval(sendingMyself);
}

В главном окне новой страницы:

window.onload = newWin.okGotIt; //just to make sure we have it...

Однако это все еще слишком сложно и не так эффективно.

Есть ли лучшие способы?

Другие вопросы по тегам