Ouvrir une nouvelle fenêtre après un événement de clic ne fonctionne pas dans Safari, Chrome

StackOverflow https://stackoverflow.com/questions/4663861

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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top