Как ссылаться на всплывающий объект при открытии страницы?
Это сводит меня с ума!
Сценарий:
Главная страница открывает всплывающее окно, а затем вызывает в нем функцию:
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...
Однако это все еще слишком сложно и не так эффективно.
Есть ли лучшие способы?