web-dev-qa-db-fra.com

Vérifier si une fenêtre est Popup ou pas?

Cette question n'est pas le duplicata de si la fenêtre est popup , mais similaire. 

Je développe une extension qui injecte des scripts dans toutes les pages Web. Je dois détecter si la fenêtre est popup ou non.

Remarque: Je ne suis pas celui qui ouvre la fenêtre contextuelle, la solution ci-dessus ne fonctionnera donc pas.

18
Jeevan

J'ai constaté que certains navigateurs définiraient window.opener sur window dans certains cas. C’est le contrôle popup le plus fiable que j’utilise actuellement.

if (window.opener && window.opener !== window) {
  // you are in a popup
}
21
Steve

Ce qui suit a fonctionné pour moi lors des tests avec Chrome, Firefox, Safari et IE8. Cela a fonctionné pour une fenêtre créée en utilisant window.open () ou target = _blank.

if (window.opener) {
    alert('inside a pop-up window or target=_blank window');
} else if (window.top !== window.self) {
    alert('inside an iframe');
} else {
    alert('this is a top level window');
}
19
BarelyFitz

window.locationbar.visible pas nécessairement seulement pour un popup, mais peut aider à détecter si l'utilisateur peut changer l'emplacement manuellement via la barre d'adresse ...

4
Zaucy

L'instruction suivante sera vraie si window est une fenêtre popup ou une sous-trame:

 window.parent != window
1
Maksym Kozlenko

Pourquoi ne pas simplement vérifier si l’ouvreur n’est PAS indéfini? un popup a un ouvreur alors qu'une page normale n'en a pas.

if (window.opener != null) 
1
BornToCode

Pour moi, je mettais en place un écran de déconnexion qui pourrait être affiché dans une fenêtre contextuelle via window.open (..) ou à partir d'un lien dans une seule page.

Je devais déterminer:

1) Si mon écran de déconnexion apparaît dans une fenêtre contextuelle, alors:

event.preventDefault();
window.close();

2) sinon, utilisez la fonction de retour du navigateur.

window.history.back();

Ma solution: Si la page est dans un popup, dans mon cas, elle a un historique de page de fenêtre de 1:

event.preventDefault();
if (window.history.length === 1) {
    window.close();
} else {
    window.history.back();
}
0
c121hains

La meilleure méthode consiste simplement à vérifier la largeur de la fenêtre, puis à redimensionner la largeur de la fenêtre en un ou deux pixels, puis à vérifier si la largeur actuelle est égale ou non à celle précédant le redimensionnement.

en d'autres termes, si vous avez réussi à redimensionner la fenêtre, vous êtes probablement dans une fenêtre contextuelle.

bonne chance.

0
jsbuster

Ce n'est pas une méthode sure, mais généralement un popup utilisant window.open() ne renvoie pas directement à une nouvelle URL, les deux fenêtres auront donc le même href. Par conséquent, dans de nombreux cas:

window.location.href == window.opener.location.href

sera vrai pour un popup. Alors tu pourrais faire:

var isPopup = (window.location.href == window.opener.location.href);

Comme je l'ai dit, cela fonctionne dans mes tests limités. Il peut donc y avoir des commentaires qui montrent où cela ne sera pas fiable.

0
Anthony