Как мне подтвердить, что окно браузера открыто, с Javascript? - PullRequest
5 голосов
/ 21 октября 2008

Я открываю новое окно браузера с моего сайта для некоторых участников. Однако некоторые могут позже закрыть его или, возможно, он изначально не открылся.

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

[уточнение:] Код, проверяющий, является ли окно открытым, будет запускаться на других страницах, а не только в том же окне и в URL, который его открыл. Представьте, что пользователь входит в систему, окно (пытается) открыться, и затем они некоторое время бродят по одной и той же вкладке / окну (или другим), прежде чем закрывают 2-е окно (или оно никогда не открывается) - я хочу, чтобы заметить, что окно было закрыто через некоторое время после первоначальной попытки открытия / после закрытия, поэтому я не уверен, что проверка возврата javascript из window.open () (с popup_window_handle.closed) легко используется или действительно возможна .

Ответы [ 3 ]

4 голосов
/ 21 октября 2008

Эта отличная, всеобъемлющая статья («Почти полный контроль над всплывающими окнами») должна ответить на все ваши вопросы о всплывающих окнах JavaScript.

"JavaScript 1.1 также представил свойство окна closed . Используя это свойство, можно определить, было ли окно открыто и впоследствии закрыто. Мы можем использовать его для прямой загрузки страницы в открывшееся окно, если оно все еще открыто для браузеров с поддержкой JavaScript 1.1: "

<script language="JavaScript"><!--
function open_main(page) {
    window_handle = window.open(page,'main');
    return false;
}
//--></script>

<script language="JavaScript1.1"><!--
function open_main(page) {
    if (opener && !opener.closed) {
        opener.location.href = page;
    }
    else {
        window_handle = window.open(page,'main');
    }
    return false;
}
//--></script>

<a href="example.htm" onClick="return open_main('example.htm')">example.htm</a>

Дополнительно: Вы можете вернуть дескриптор окна на другую страницу, обратившись к имени всплывающего окна следующим образом:

window_handle = window.open(page,'myPopupName');

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

1 голос
/ 21 октября 2008
var myWin = window.open(...);

if (myWin.closed)
{
    myWin = window.open(...);
}
0 голосов
/ 21 октября 2008

Универсального способа проверить это не существует, поскольку каждый блокировщик всплывающих окон имеет свое поведение. Например, Opera не будет отображать всплывающее окно, но widow.closed возвратит false, поскольку за сценой Opera хранит теневую копию заблокированного окна, на тот случай, если пользователь все равно захочет его увидеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...