228 votes

Évitez les bloqueurs de fenêtres publicitaires intempestives

Est-il un ensemble de meilleures pratiques ou des conseils pour éviter les fenêtres pop-up bloquées par les différents navigateurs bloqueurs de pop-up?

Par pop-up je veux dire windows créées par window.open ou window.showModalDialog méthodes.

Merci beaucoup

Edit:

Je n'ai pas l'intention de contourner le pop-up - bloquants avec des hacks. Je suis venu à cette pendant le développement d'un protocole OAuth le flux d'authentification purement dans javascript et j'avais besoin de montrer le utilisateur "accorder l'accès" de la fenêtre (j' n'a pas pu éviter les bloqueurs de pop-up et eu à utiliser une approche différente).

347voto

dthorpe Points 23314

La règle générale est que les bloqueurs de pop-ups vont s'engager si window.open ou similaire est appelé à partir de javascript qui n'est pas invoquée par l' action directe de l'utilisateur. Qui est, vous pouvez appeler window.open en réponse à un clic sur un bouton sans se faire toucher par le bloqueur de pop-up, mais si vous mettez le même code dans un événement de minuterie, il sera bloqué. La profondeur de la chaîne d'appel est également un facteur de certains anciens navigateurs ne regarde que l'appelant immédiat, les navigateurs les plus récents peut revenir en arrière un peu pour voir si l'appelant de l'appelant a été un clic de souris, etc. Le garder comme peu que vous le pouvez pour éviter les bloqueurs de pop-ups.

238voto

Swiss Mister Points 73

Basé sur Jason Sebring' astuce très utile, et sur le stuff couvert ici et , j'ai trouvé une solution parfaite pour mon cas:

Le Pseudo-code avec des extraits de code Javascript:

  1. créer immédiatement un vide popup sur action de l'utilisateur

    var importantStuff = window.open('', '_blank');
    
  2. le remplir avec le contenu lorsque vous êtes prêt (lors de l'appel AJAX est retourné, par exemple)

    importantStuff.location.href = 'http://shrib.com';
    

Dans l'étape 1, une belle attente de l'écran peut être affiché. Créer à l'aide de javascript, ou de remplacer le vide URL (") avec une page HTML (http://example.com/waiting.html).

J'utilise cette solution pour un mailto redirection, et il fonctionne sur tous mes navigateurs (windows 7, Android). L' _blank peu d'aide pour le mailto redirection de travailler sur mobile, btw.

Votre expérience? De toute façon pour améliorer cela?

8voto

Jason Sebring Points 4309

Ici est une astuce de Google sur le protocole oauth lorsque vous allez à travers eux sur l'API JavaScript:

http://code.google.com/p/google-api-javascript-client/wiki/Authentication

Voir la zone où il se lit comme suit:

La configuration de l'Authentification

Le client de la mise en œuvre de l'authentification OAuth 2.0 utilise une fenêtre pop-up pour demander à l'utilisateur de signer et d'approuver la demande. Le premier appel à gapi.auth.autoriser peuvent déclencher des bloqueurs de pop-ups, car il ouvre la fenêtre pop-up indirectement. Pour éviter le bloqueur de pop-up à partir de déclenchement sur auth appels, appel gapi.auth.init(rappel) lorsque le client charge. Le rappel sera exécutée lorsque la bibliothèque est prêt à faire auth appels.

Je suppose que ses relatives à la vraie réponse ci-dessus dans la façon dont il explique si il n'y est une réponse immédiate, il ne sera pas du voyage le popup d'alarme. Le "gapi.auth.init" est ce qui en fait l'api se produit immédiatement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X