2008-10-21 8 views
5

J'ouvre une nouvelle fenêtre de navigation de mon site pour certains des membres. Cependant, certains peuvent le fermer plus tard, ou il est possible qu'il ait initialement échoué à s'ouvrir.Comment puis-je confirmer qu'une fenêtre de navigateur est ouverte, avec Javascript?

Existe-t-il un extrait de Javascript assez simple qui peut être exécuté sur chaque page pour confirmer si une autre fenêtre du navigateur est ouverte, et si ce n'est pas le cas, fournir un lien pour le rouvrir? Le code à vérifier est une fenêtre ouverte qui serait exécutée sur d'autres pages - pas seulement dans la même fenêtre et l'URL qui l'a ouvert. Imaginez un utilisateur se connectant, la fenêtre (essaie de) s'ouvrir, puis ils surfent dans le même onglet/fenêtre (ou autres) pendant un certain temps avant de fermer la 2ème fenêtre (ou elle n'a jamais ouvert) - Je veux pouvoir pour remarquer que la fenêtre a été fermée quelque temps après la première tentative d'ouverture/après sa fermeture, je ne suis donc pas sûr que la vérification du retour de javascript depuis window.open() (avec popup_window_handle.closed) soit facilement utilisée, voire possible .

Répondre

4

Cette excellent, comprehensive article("contrôle quasi complet des fenêtres pop-up") devrait répondre à toutes vos questions sur le javascript fenêtres pop-up.

« JavaScript 1.1 a également introduit la fenêtre fermé propriété. L'utilisation de cette propriété, il est possible de détecter si une fenêtre a été ouverte puis fermée. On peut l'utiliser pour charger une page directement dans la fenêtre d'ouverture si il reste ouvert pour JavaScript 1.1 navigateurs activé: »

<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> 

Addition: Vous pouvez obtenir la fenêtre poignée vers l'arrière dans une autre page en se référant au nom de la fenêtre contextuelle de cette façon:

Je suppose que dans votre cas, vous devriez penser à une manière cohérente de créer tous les noms des fenêtres contextuelles dans toute l'application.

1
var myWin = window.open(...); 

if (myWin.closed) 
{ 
    myWin = window.open(...); 
} 
+0

Pendant combien de temps la variable 'myWin' serait-elle disponible? Juste pendant que c'est sur la même page? –

+0

@Topbit: Oui, mais vous pouvez récupérer la fenêtre en faisant référence au nom du popup de la façon suivante: window_handle = window.open (page, 'myPopupName'); - Je recommande vraiment de lire l'article lié dans ma réponse (splattne). – splattne

0

Il n'y a pas de façon universelle de le vérifier car chaque bloqueur de fenêtres contextuelles a un comportement différent. Par exemple, Opera ne montrera pas le pop-up mais le widow.closed retournera false car derrière la scène Opera garde une copie d'ombre de la fenêtre bloquée, juste au cas où l'utilisateur voudrait la voir quand même.

Questions connexes