2010-10-13 3 views
2

меня эта маленькая функция, чтобы открыть/закрыть всплывающую игроку:window.close(); не работает, когда страница изменена или обновлена ​​

function popuponclick(popup) 
{ 
    my_window = window.open("folder/player-itself.htm", popup, "width=350,height=150"); 
} 

function closepopup() 
{ 
    my_window.close(); 
} 

я называю функцию из HTML-якорей, которые находятся на каждой странице сайта (идея заключается в том, чтобы иметь плеер останавливается/запускается всякий раз, когда вы хотите) ... сейчас ...

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

Благодарим за помощь.

+0

Это общедоступный сайт? URL-адрес может помочь вам быстрее получить ответ. – Snekse

ответ

1

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

Таким образом, ссылка «my_window», которую вы так любезно сохранили, когда открылось второе окно, исчезла навсегда, а переменная «my_window» в только что загруженном окне ничего не содержит. Это имя - лишь издевательство над переменной на текущей странице.

Единственный способ справиться с этой ситуацией - всплывающее окно периодически проверять через «window.opener», чтобы увидеть, была ли его родительская страница грубо заменена некоторым нарушителем. Если это произойдет (и новая страница из одного домена), то всплывающая страница может восстановить ссылку на себя в переменной «my_window» новой страницы.

Редактировать — OK Вот образец. Вы бы поставить что-то подобное в всплывающем странице , а не запуск страница:

<script> 
    var checkParent = setInterval(function() { 
    try { 
     if (window.opener && ('my_window' in window.opener)) 
     window.opener.my_window = window; 
    } 
    catch (_) { 
     // clear the timer, since we probably won't be able to fix it now 
     clearInterval(checkParent); 
    } 
    }, 100); 
</script> 

Это, вероятно, довольно близко.

+0

Убей меня, и сделал это поэтично :) – annakata

+0

Ничего себе! Спасибо, Поинты за этот супер классный ответ. Я получаю это. Не настаивайте, но фрагмент кода, чтобы позаботиться об этом, будет весьма признателен. – Ramon

+0

Ударьте меня тоже .. Также, еще один способ запомнить дескриптор окна даже на странице обновления, проверьте эти ссылки http://www.irt.org/script/782.htm и http://www.irt.org /script/874.htm. –

Смежные вопросы