Wykonanie procedury podczas zamykania okna

0

Cześć, sytuacja wygląda tak.
Mam jeden plik (nazwijmy go "opener.html"), który otwiera plik inny za pomocą funkcji JS:

function popup(url, title = '', width = 200, height = 200, onClose = null)
{
//obliczam środek ekranu
  left = (screen.width / 2) - (width / 2);
  top = (screen.height / 2) - (height / 2);
  if (title != '')
	show_title = 'yes';
  else
	show_title = 'no';

//otwieram okno		
  wnd = window.open(url, title, 'height='+height+';width='+width+';left='+left+';top='+top+';location=no;menubar=no;' + 'resizable=yes;scrollbars=no;status=yes;titlebar='+show_title+';toolbar=no');
	
//przypisuję procedurę, która ma się wykonać podczas zamykania
  if(onClose != null)
	wnd.onBeforeunload = onClose;
}

Niby wszystko wygląda prosto, jednak nie działa.
Procedura jest wywoływana następująco(opener.html):

<a rel="nofollow" href="#" onclick="popup('link.php?parametry', 'Tytuł okna', 200, 500, data_change);">

gdzie "data_change" to nazwa procedury w "opener.html", która ma się wykonać.
Testuję na Firefox. Nic się nie dzieje. Procedura się nie wywołuje, a Firefox nie zgłasza żadnego błędu. Co tu jest nie tak? Próbowałem też ze zdarzeniem: "wnd.onUnload", ale sytuacja jest taka sama. Okno jest zamykane przez window.close().

0

Dochodzę do wniosku, że bez timera się nie da. Aktualny, działający kod wygląda tak:

function popup(url, title = '', width = 200, height = 200, onClose = null)
{
	wnd = window.open(...)
	
	if(onClose != null)
	{
		var timer = setInterval(
			function()
			{
				if(wnd.closed)
				{
					clearInterval(timer);
					onClose();
				}
			}, 500);
	}
	
	
}

jeśli da się bez tego timera, to proszę o pomoc :)

0

Poczytaj o zdarzeniach w ogóle, a w szczególności o window.onclosed (przy czym window będzie obiektem zwracanym przez window.open, czyli u Ciebie wnd).

Przed wnd powinno znaleźć się słowo kluczowe var.

0

Miej na uwadze, że przeglądarki mogą Ci blokować dostępność zdarzenia zamknięcia okna, więc nie możesz na tym polegać, nawet przy włączonym javascripcie.

0

Kolejna sprawa, to że nie ma czegoś takiego jak onBeforeunload, jest onbeforeunload. Tylko małe litery. Dla HTML nie robi to różnicy, ale w przypadku JavaScript różnica już jest :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1