Найти окно, ранее открытое с помощью window.open

StackOverflow https://stackoverflow.com/questions/2455158

  •  20-09-2019
  •  | 
  •  

Вопрос

У нас есть следующая ситуация, работающая с одного домена:

Страница А использует window.open() открыть именованное окно (всплывающий проигрыватель). window.open() дает странице A ссылку на окно.

Пользователь перезагружает страницу А.Ссылка на указанное окно потеряна.С использованием window.open() «найти» окно имеет досадный побочный эффект в виде его перезагрузки (нежелательно).Есть ли другой способ получить ссылку на это окно?

Это было полезно?

Решение

Попробуй это:

var playerUrl = 'http://my.player...';
var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ;
if(popupPlayer.location.href == 'about:blank' ){
    popupPlayer.location = playerUrl ;
}
popupPlayer.focus();

Откроется пустое окно с уникальным именем.Поскольку URL-адрес пуст, содержимое окна не будет перезагружено.

Другие советы

AFAIK, нет, нет..

Что-то вроде «грязного, но я думаю, это сработает» — периодически сбрасывать ссылку на родительское окно из всплывающего окна с помощью window.opener, используя что-то вроде этого кода:

    setInterval(function() {
        if(window.opener) {
            window.opener.document.myPopupWindow = window
        }
    }, 100)

В родительском окне вы сможете получить доступ к document.myPopupWindow даже после перезагрузки (ну, через 100 мс после перезагрузки).Это должно работать через браузер.

На самом деле вы уничтожили родительский элемент (страница A) созданного окна (Popup), поэтому оно больше не имеет ссылки на исходный родительский элемент, поэтому вы не можете получить прямую ссылку.

Единственное решение, которое я могу придумать, — это использовать браузер, который предлагает вам добавленную возможность JavaScript для циклического переключения между активными окнами (вкладками) и поиска того, которое имеет специальное свойство (т. е.:ваша перезагруженная страница А), которая распознается всплывающим окном.

К сожалению, я думаю, что только Firefox имеет некоторые дополнительные возможности или расширения, которые дают вам такую ​​гибкость.(хотя это также угроза безопасности)

Это должно сработать.Добавьте этот код во всплывающее окно:

function updateOpener() {
    if (window.opener)
        window.opener.document.myPopupWindow = window;
    else
        setTimeout(updateOpener, 100);
}

updateOpener(); 

И это при загрузке родительского окна.Чтобы убедиться, что myPopupWindow установлен, подождите 100 мс, прежде чем получить к нему доступ.

setTimeout(function() {
    if (document.myPopupWindow) 
        document.myPopupWindow.focus();
}, 100);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top