Come posso confermare che una finestra del browser è aperta, con Javascript?
-
03-07-2019 - |
Domanda
Sto aprendo una nuova finestra del browser dal mio sito per alcuni membri. Tuttavia, alcuni potrebbero successivamente chiuderlo o potrebbe non essere stato possibile aprire inizialmente.
Esiste uno snippet di Javascript abbastanza semplice che può essere eseguito su ogni pagina per confermare se è aperta un'altra finestra del browser e, in caso contrario, fornire un collegamento per riaprirlo?
[chiarimento:] Il codice da verificare è che una finestra aperta sarebbe eseguita su altre pagine, non solo nella stessa finestra e URL che l'hanno aperta. Immagina un utente che accede, la finestra (tenta di) aprirsi e quindi naviga nella stessa scheda / finestra (o altri) per un po 'di tempo prima di chiudere la seconda finestra (o non si è mai aperta) - Voglio essere in grado notare che la finestra è stata chiusa qualche tempo dopo il tentativo iniziale di apertura / dopo la sua chiusura, quindi non sono sicuro che il controllo del ritorno di javascript da window.open () (con popup_window_handle.closed) sia facilmente utilizzabile, o addirittura possibile .
Soluzione
Questo articolo eccellente e completo (" Quasi completo controllo delle finestre pop-up ") dovrebbe rispondere a tutte le tue domande sulle finestre popup javascript.
" JavaScript 1.1 ha inoltre introdotto la proprietà chiuso della finestra. Utilizzando questa proprietà, è possibile rilevare se una finestra è stata aperta e successivamente chiusa. Possiamo usarlo per caricare una pagina direttamente nella finestra di apertura se è ancora aperta per i browser abilitati per 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>
Aggiunta: Puoi recuperare la maniglia della finestra in un'altra pagina facendo riferimento al nome del popup in questo modo:
window_handle = window.open(page,'myPopupName');
Immagino che nel tuo caso dovresti pensare a un modo coerente per creare tutti i nomi delle finestre popup nell'intera applicazione.
Altri suggerimenti
var myWin = window.open(...);
if (myWin.closed)
{
myWin = window.open(...);
}
Non esiste un modo universale per verificarlo poiché ogni blocco popup ha un comportamento diverso. Ad esempio, Opera non mostrerà il pop-up, ma widow.closed restituirà false poiché dietro la scena Opera mantiene una copia shadow della finestra bloccata, nel caso in cui l'utente desideri comunque visualizzarla.