Otworzyłem wyskakujące okienko przez window.open w JavaScript, chcę odświeżyć stronę nadrzędną po zamknięciu tego wyskakującego okienka. (Zdarzenie onclose?) Jak mogę to zrobić?
window.open("foo.html","windowName", "width=200,height=200,scrollbars=no");
Odpowiedzi:
Możesz uzyskać dostęp do okna nadrzędnego za pomocą ' window.opener ', więc napisz coś takiego w oknie potomnym:
<script> window.onunload = refreshParent; function refreshParent() { window.opener.location.reload(); } </script>
źródło
popupWindow.closed
używając rozwiązaniasetInterval
jak w @ Zuul.W wyskakującym okienku nie ma żadnego zdarzenia zamknięcia, którego można by odsłuchać.
Z drugiej strony istnieje właściwość closed, która jest ustawiana na true, gdy okno zostanie zamknięte.
Możesz ustawić licznik czasu, aby sprawdzić tę zamkniętą właściwość i zrobić to w następujący sposób:
var win = window.open('foo.html', 'windowName',"width=200,height=200,scrollbars=no"); var timer = setInterval(function() { if(win.closed) { clearInterval(timer); alert('closed'); } }, 1000);
Zobacz ten działający przykład Fiddle !
źródło
na swojej stronie podrzędnej umieść te:
<script type="text/javascript"> function refreshAndClose() { window.opener.location.reload(true); window.close(); } </script>
i
<body onbeforeunload="refreshAndClose();">
ale jako dobry projekt interfejsu użytkownika powinieneś używać Close,
button
ponieważ jest bardziej przyjazny dla użytkownika. zobacz kod poniżej.<script type="text/javascript"> $(document).ready(function () { $('#btn').click(function () { window.opener.location.reload(true); window.close(); }); }); </script> <input type='button' id='btn' value='Close' />
źródło
Używam tego:
<script language='javascript'> var t; function doLoad() { t = setTimeout("window.close()",1000); } </script> <script type="text/javascript"> function refreshAndClose() { window.opener.location.reload(true); window.close(); } </script> <body onbeforeunload="refreshAndClose();" onLoad='doLoad()''>
kiedy okno się zamyka, odświeża okno nadrzędne.
źródło
window.open zwróci odniesienie do nowo utworzonego okna, pod warunkiem, że otwarty adres URL jest zgodny z zasadami tego samego pochodzenia .
To powinno działać:
function windowClose() { window.location.reload(); } var foo = window.open("foo.html","windowName", "width=200,height=200,scrollbars=no"); foo.onbeforeunload= windowClose;
źródło
W moim przypadku otworzyłem wyskakujące okienko po kliknięciu przycisku linku na stronie nadrzędnej. Aby odświeżyć rodzica po zamknięciu dziecka za pomocą
window.opener.location.reload();
w oknie dziecka spowodowało ponowne otwarcie okna podrzędnego (chyba ze względu na stan widoku. Popraw mnie, jeśli się mylę). Postanowiłem więc nie przeładowywać strony w rodzica i ponownie wczytywać stronę przypisując jej ten sam adres URL.
Aby uniknąć ponownego otwierania wyskakującego okienka po zamknięciu wyskakującego okienka, może to pomóc,
window.onunload = function(){ window.opener.location = window.opener.location;};
źródło
Jeśli Twoja aplikacja działa w przeglądarce obsługującej HTML5. Możesz użyć postMessage . Podany tam przykład jest bardzo podobny do twojego.
źródło
Spróbuj tego
źródło
Możesz wejść na stronę główną za pomocą polecenia rodzica (rodzic jest oknem) po kroku możesz zrobić wszystko ...
function funcx() { var result = confirm('bla bla bla.!'); if(result) //parent.location.assign("http://localhost:58250/Ekocc/" + document.getElementById('hdnLink').value + ""); parent.location.assign("http://blabla.com/" + document.getElementById('hdnLink').value + ""); }
źródło
Możesz użyć poniższego kodu na stronie nadrzędnej.
<script> window.onunload = refreshParent; function refreshParent() { window.opener.location.reload(); } </script>
źródło
Poniższy kod pozwoli odświeżyć zamknięcie okna nadrzędnego:
function ManageQB_PopUp() { $(document).ready(function () { window.close(); }); window.onunload = function () { var win = window.opener; if (!win.closed) { window.opener.location.reload(); } }; }
źródło