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.
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
}
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');
}
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 ...
L'instruction suivante sera vraie si window est une fenêtre popup ou une sous-trame:
window.parent != window
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)
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();
}
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.
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.