Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отследить закрыта ли вызванная вкладка (https://javascript.ru/forum/events/47281-otsledit-zakryta-li-vyzvannaya-vkladka.html)

cript 17.05.2014 06:21

Отследить закрыта ли вызванная вкладка
 
Приветствую!
Делаю открытие новой вкладки, например
function new() {
window.open("http://javascript.ru", "JSSite", "width=420, height=230, resizable=yes, scrollbars=yes, status=yes");
}
new();

Подскажите как отследить закрытие этой вкладки\окна?

Aetae 17.05.2014 06:38

function newWindow() {
    var win = window.open("http://javascript.ru", "JSSite", "width=420, height=230, resizable=yes, scrollbars=yes, status=yes");
    return win
}
var newWin = newWindow();
if(newWin){
    //код
}


P.S. new - оператор, работать то что вы написали не будет.)

cript 17.05.2014 06:57

Нужно отследить закрыл ли пользователь вызванное окно, ваш код не работает.
<script>function newwin() {
var newwin = window.open("http://javascript.ru", "JSSite", "width=420, height=230, resizable=yes, scrollbars=yes, status=yes");
return newwin;
}
var newwindow = newwin();
if(newwindow) {
alert();
}
</script>
<div onclick="newwin();">Click</div>

Aetae 17.05.2014 08:49

<script>function newwin() {
    var newwin = window.open("http://javascript.ru", "JSSite", "width=420, height=230, resizable=yes, scrollbars=yes, status=yes");
    return newwin;
}
function test(win) {
    return alert( win.closed ? 'closed' : 'not closed' );
}
</script>
<div onclick="newwindow = newwin();">Open</div>
<div onclick="test(newwindow);">Test</div>

cript 17.05.2014 09:10

Я имел ввиду если пользователь закрывает окно, то выполняем действие.
Ваш пример работает только если ставить settimeout..

cript 17.05.2014 09:37

Если это не возможно, то подскажите как правильно установить settimeout на проверку?

Aetae 17.05.2014 09:48

Если во вкладке тот же домен, то newwin.onbeforeunload\.onunload .
Иначе - извращаться.
Если поддержка старых браузеров не в приоритете, то для других доменов можно использовать postMessage.

Тамйер же примерно так:
(function timer(){
    if(newwin.closed) doSomething();
    else setTimeout(timer, 100);
})())

cript 17.05.2014 10:01

Цитата:

Сообщение от Aetae
Иначе - извращаться.

Я так понимаю практически нереально..?

С таймером что-то не выходит
function checkwindow(win) {
if(win.closed == true)
{
alert('closed');
}
if(win.closed == false)
{
setTimeout(checkwindow, 1000);
}
}

Aetae 17.05.2014 10:11

<script>
function newWin(){
    var win = window.open("http://javascript.ru", "JSSite", "width=420, height=230, resizable=yes, scrollbars=yes, status=yes");

    (function timer(){
        if(win.closed) doSomething(win);
        else setTimeout(timer, 100);
    }())

    return win;
}
function doSomething(win) {
    return alert( win.closed );
}
</script>
<div onclick="newWin();">Open</div>

cript 17.05.2014 10:41

Пытаюсь сделать так: если окно открыто продолжаем проверку, если закрыто, то alert.
<script>function newWin() {
var newwin = window.open("http://javascript.ru", "JSSite", "width=420, height=230, resizable=yes, scrollbars=yes, status=yes");
(function checkwindow(){
if(win.closed == false) 
{
alert();
}
else 
{
alert('OK');
setTimeout(checkwindow, 1000);
}
}())   
return newwin;
}
</script>
<div onclick="newWin();">Open</div>

Что делаю не так..?


Часовой пояс GMT +3, время: 11:27.