2010-06-03 3 views
12

J'ai deux pages one.html et two.htmldéfinir l'objet d'une fenêtre pop-up à chaque fois

J'ouvre une nouvelle fenêtre en utilisant le code suivant

//here popup is a global variable 
popup=window.open('two.html','two'); 

pour la première fois une fenêtre pop-up ouvrir avec succès et obtenir la mise au point, mais si j'essaie de l'ouvrir à nouveau sans fermer popup déjà ouvert, puis deux.html ne reçoit pas le focus pour la deuxième fois.

Note: J'ai mis le nom de la fenêtre pop-up comme « deux »

+0

Je ne suis pas sûr que cela soit possible. Pourquoi ne pas ouvrir une nouvelle fenêtre? –

+1

je veux juste ouvrir une nouvelle fenêtre une seule fois, pas à chaque fois – hunt

+1

accepter les ans si cela fonctionne pour vous –

Répondre

9

vous pouvez achive en utilisant focus fonction utilisée ci-dessous

<script language="javascript" type="text/javascript"> 
<!-- 
function popitup(url) { 
    newwindow=window.open(url,'name','height=200,width=150'); 
    if (window.focus) {newwindow.focus()} 

     if (!newwindow.closed) {newwindow.focus()} 
    return false; 
} 

// --> 
</script> 
+0

bien au-dessus du code ne fonctionne que dans IE, mais maintenant dans Firefox 3.6 – hunt

+0

@hunt: ni Google Chrome. La mise au point de la fenêtre n'est pas compatible avec tous les navigateurs. –

+1

Eh bien, il est "compatible" en ce sens qu'il ne fera rien à essayer, mais Firefox, Chrome et Safari n'obéiront pas à la demande. Firefox peut être configuré par son utilisateur pour permettre aux requêtes 'focus()' comme ça de fonctionner, mais je pense que Chrome et Safari l'ignorent toujours. Il n'y a aucun moyen de forcer ces navigateurs à faire attention. (En fait Safari est * vraiment * sérieux à ce sujet: http://whatsthepointy.blogspot.com) – Pointy

1

Vous pouvez fermer la fenêtre avant de l'ouvrir si vous vérifiez voir si la fenêtre contextuelle est déjà ouverte lorsque vous appelez la fonction.

var popup; 
​function openPop() { 
    if ("close" in popup) popup.close(); 
    popup = window.open("http://stackoverflow.com", "test", "width=200, height=200");​​​​​​​​ 
} 

Cela garantira que la fenêtre contextuelle apparaît toujours en haut.

+0

bien que ce code fermera ma fenêtre précédemment ouverte, et en ouvre une autre. Je ne veux pas fermer ma fenêtre précédente – hunt

+0

@hunt: Comme je l'ai dit dans mon commentaire sur [la réponse de pranay_stacker] (http://stackoverflow.com/questions/2965754/set-the-focus-of-a-popup- window-everytime/2965817 # 2965817), la méthode de mise au point ne fonctionnera pas pour les fenêtres contextuelles. Je suis à peu près sûr qu'il n'y a pas d'autre moyen de recentrer la fenêtre. –

8
focusedWindow = window.open('two.html','two').focus(); 

directement au centre append() au protoype window.open

+0

Solution simple ... Il WORKSSS – ELAYARAJA

+0

Ne fonctionne pas sur safari dans l'iphone – Zohaib

+0

Ne fonctionne pas dans Edge et Firefox. – sibbl

1

Vérifiez vos paramètres Firefox 2 à

  1. Allez dans Outils -> Options -> Contenu
  2. Assurez-vous " Activer JavaScript "est activé.
  3. À côté de "Activer JavaScript", cliquez sur le bouton "Avancé".
  4. Assurez-vous qu'il ya une coche dans la case [x] ou Raise fenêtres inférieures

Si le paramètre « Raise ou les fenêtres inférieures » est désactivée, ce désactive le window.focus() méthode.

2
var win = window.open('two.html','two'); 
win.document.getElementsByTagName("body")[0].focus(); //focus the body rather than the window. 
+0

Cette approche a fonctionné pour moi testé dans Chrome48, FF42 et IE11. – Doug

+0

Ne travaillait pas pour moi. Il ouvre "two.html" dans mon premier onglet où j'appelle ce code. Et oui, j'ai changé le nom de var de 'window'. Je pourrais résoudre ce problème en appelant la deuxième ligne un peu plus tard via setTimeout, mais il n'a pas non plus focalisé le corps dans i.e. Edge. – sibbl

6

Ma solution qui fonctionne toujours empirique:

setTimeout('detail.focus()', 1); 

.focus() juste après Adjonction ouvert ne fonctionne pas toujours, ni appeler un .focus() sans setTimeout.

Je sais que c'est moche (je voulais m'en débarrasser dès maintenant, après quelques années, sans succès), et je ne sais pas exactement pourquoi et comment, mais ça marche.

+0

J'ai corrigé mon problème firefox en faisant setTimeout (function() {window.open (...)}, 1) –

+0

si je comprends bien, setTimeout déclenchera son script après l'exécution de la dernière ligne du script en cours, mais cela ne fonctionnera pas dans les scripts multythreading, car le script chronométré fonctionnera à l'heure ... –

0
setTimeout(function() { 
    window.open('PageName', '', 'height=560,width=1120,resizable=no,left=100,top=50,screenX=100,screenY=50'); 
}, 100); 

-> Ce code est utilisé pour donner le focus sur une fenêtre nouvellement ouverte. -> Mettez-le en javascript ('setTimeout est une fonction intégrée de javascript') -> Il arrive souvent que lorsque la fenêtre contextuelle est ouverte, elle passe derrière l'ancienne fenêtre, Donc, il est très utile de se concentrer sur une nouvelle fenêtre.

+1

Débordement! Plutôt que de publier uniquement un bloc de code, veuillez expliquer pourquoi ce code résout le problème posé. Sans explication, ce n'est pas une réponse. – Artemix

0

Il est une solution d'une doublure, mise au point d'utilisation sur votre pop up var:

popup=window.open('two.html','two'); 
popup.focus(); 

Ce sera toujours ouvrir votre fenêtre pop-up même si elle est pas fermée.

0

J'ai trouvé une réponse pour moi-même qui fonctionne. Dans le html du corps de la popup, ajoutez à la balise body onload = "this.window.focus()". Même si vous réduisez la fenêtre, elle revient en avant et au centre. Soyez sûr et nommez la fenêtre dans votre script d'exécution window.open ('url', 'some name', 'vars'); J'espère que cela vous aide!

0

Malheureusement, certains navigateurs modernes ne prennent toujours pas en charge les onglets de focalisation, voir this Firefox bug entry, par exemple.

Cependant, le code suivant fonctionne bien pour moi. Pour contourner ce problème, il rouvre une fenêtre/onglet si elle ne peut pas être concentré:

var win = window.open("two.html", "two") 
    win.focus(); 
    setTimeout(function() { 
    if(document.hasFocus()) { 
     win.close(); 
     window.open("two.html", "two") 
    } 
    }, 1); 

Dans la première ligne, il ouvre la fenêtre et tente de se concentrer à l'aide de la deuxième ligne. Si une fenêtre portant le nom two est déjà présente, aucune nouvelle fenêtre/aucun onglet n'est ouvert, mais il est réutilisé.

L'astuce est maintenant, que nous vérifions si la fenêtre en cours a encore le focus en utilisant document.hasFocus(). Si c'est le cas, nous fermons la fenêtre et la rouvrons. Ceci est uniquement pour les navigateurs qui ne supportent pas la mise au point de l'onglet qui doit être réutilisé directement. Actuellement, c'est le cas pour FF et IE/MS Edge. Chrome fonctionne bien.

Toutefois, directement après l'utilisation de window.open, document.hasFocus() renvoie toujours la valeur true (donc, également dans Chrome). La solution de contournement consiste à utiliser setTimeout une ms plus tard.