Ouvrir une nouvelle fenêtre après un événement de clic ne fonctionne pas dans Safari, Chrome
-
10-10-2019 - |
Question
Je suis en train d'ouvrir une nouvelle fenêtre comme ceci:
$('#wrapper').click(function() {
window.setTimeout(function() {
//alert('hi');
window.open("http://example.com", "ExternalLinks", "resizable=yes, scrollbars=yes, status=yes");
}, 1000);
});
Cela fonctionne dans Firefox, mais pas dans Chrome ou Safari (jusqu'à présent, je viens de tester sur un Mac). Les travaux de alert()
dans tous les navigateurs, il semble donc y avoir quelque chose de l'empêcher d'exécuter window.open
dans Safari / Chrome. De plus, si je retire le setTimeout
et il suffit d'appeler le window.open
alors il fonctionne dans les 3 navigateurs. Il est presque comme si le window.open
est niché trop loin de l'événement click
, il ne fonctionne pas dans Safari / Chrome.
Donc, vous savez, j'ai un site tout Flash et je suis en train d'obtenir des liens externes à ouvrir dans une nouvelle fenêtre, donc je lis la balise de hachage dans l'URL (ex htp:. // exemple. com / # / facebook /) et si elle correspond à certains éléments, alors je vous appelle window.open
pour ouvrir une URL spécifique. Je n'ai pas accès à la source Flash, ou je gérer cela il.
Toutes les idées?
La solution
Safari / Chrome ont intégré les bloqueurs de pop-up qui arrêtent ce de travailler. Le seul javascript qui est autorisé à ouvrir une nouvelle fenêtre dans Safari / Chrome est javascript attaché directement à cliquer sur les gestionnaires (et d'autres gestionnaires d'entrée directe de l'utilisateur). Dans les versions antérieures personnes cernées des façons de tricher (comme la génération d'un autre élément - une forme ou div - et qui simulent l'entrée d'utilisateur avec javascript), mais les versions plus récentes sont plus intelligents sur la détection de cette. Je recommanderais reconfigurant les choses afin que vous n'utilisez pas un pop-up retard -. Qui est le genre de chose qui peut généralement être sonné faux à un utilisateur après tout
Autres conseils
Je suis autour en vérifiant la valeur de retour de window.open () pour non défini. Si cela est vrai alerte d'appel () avec un message pour l'utilisateur de désactiver leur bloqueur de pop-up.
var myWin = window.open([args]);
if (myWin == undefined)
alert('Please disable your popup blocker');
Une autre solution
Il suffit d'ouvrir une fenêtre avec des options ACCEPT et d'annulation et d'attacher l'action window.open
au bouton ACCEPTER et il sera des œuvres. Il a travaillé pour moi ...