2008-10-21 3 views
5

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

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

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

ответ

4

Это excellent, comprehensive article(«Почти полный контроль всплывающих окон») должен ответить на все ваши вопросы Javascript всплывающих окон.

«JavaScript 1.1 также введен в окне закрыты свойства. Используя это свойство, можно обнаружить, если окно было открыто, а затем закрыто. Мы можем использовать это, чтобы загрузить страницу прямо в окно ножа, если она по-прежнему открыты для 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
var myWin = window.open(...); 

if (myWin.closed) 
{ 
    myWin = window.open(...); 
} 
+0

Как долго будет доступна переменная myWin? Просто пока он находится на одной странице? –

+0

@Topbit: Да, но вы можете вернуть дескриптор окна, обратившись к имени всплывающего окна таким образом: window_handle = window.open (page, 'myPopupName'); - Я действительно рекомендую прочитать связанную статью в своем ответе (splattne). – splattne

0

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