Mauvais bloquage de popup Firefox

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
El Riiico

Mauvais bloquage de popup Firefox

Message par El Riiico »

Bonjour.

Je suis gêné par le bloqueur de popup de Firefox qui fait mal - ou trop bien, ça revient au même - son boulot.

Je développe une interface d'administration avec gestion des droits de publication. C'est un site d'annnonces, lorsqu'une agence cliquent sur "Saisir une nouvelle annonce", je dois vérifier en temps réel que l'agence n'a pas déjà dépassé son forfait. Pour celà, j'utilise du javascript. Quand l'utilisateur clique sur le lien, une requête est envoyée au serveur via Xmlhttprequest. Et là deux solutions :
- L'agence n'a pas dépassé son forfait, la page de saisie est affichée sans problème (cle contrôle est suffisament rapide pour ne pas gêner la navigation).
- L'agence a déjà utilisé tout son forfait : La page de saisie n'est pas affichée (le clic sur le lien annulé), ET UN POPUP D'AVERTISSEMENT S'OUVRE. Qui dit "Votre quota d'annonces est déjà atteint, souhaitez-vous dépasser votre forfait (oui / non)".

Bref, c'est pas du tout de la pub intempestive et c'est bloqué par firefox. Et c'est gênant parce que c'est indispensable. Je sais bien que la barre de bloquage de popup s'ouvre, mais par habitude, énormément d'utilisateurs vont bloquer le popup et se retrouver bloquer par la suite.

Ma question est surtout technique. Je ne vois pas pourquoi :

Code : Tout sélectionner

<a href="page.htm" onclick="window.open(this.href); return false;">
et

Code : Tout sélectionner

<a href="page.htm" onclick="fonction_simple_ouverture_popup();return false;">
passent sans problème, et pourquoi

Code : Tout sélectionner

<a href="page.htm" onclick="ma_fonction_de_controle();return false;">
est bloqué.

Code : Tout sélectionner

ma_fonction_de_controle()
{
	xmlhttp_object = getHTTPObject();//Ma fonction générique pour les xmlhttprequest
	xmlhttp_object.open('POST','controle_droits_publication.php',true); //ouverture asynchrone
	xmlhttp_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xmlhttp_object.onreadystatechange = function()
	{
		if(xmlhttp_object.readyState == 4)
		{
			if(xmlhttp_object.responseText != '')
			{
				if(xmlhttp_object.responseText == 'true')
				{
					window.location.href = obj.getAttribute('href');
				}
				if(xmlhttp_object.responseText == 'false')
				{
					window.open('fichier_popup.php','nom_popup','liste_parametres');
				}
			}
		}
	}
	xmlhttp_object.send('id_agence=' + id_agence);
}
En fait le blocage semble apparaître dès que le window.open est placé dans la gestion d'une réponse d'objet Xmlhttprequest. Pourquoi tant de hainnne ? Y'a-t'il un moyen d'éviter le bloquage ? De modifier mon code en gardant le contrôle en temps réel au moment du clic ?
Si ça continue, je vais me retrouver obliger de simuler un popup javascrpt rien qu'à cause de Firefox, ça la fout mal...
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Message par Asumbaa »

Salut,

Firefox bloque les popups qui s'ouvrent sans que tu demandes rien, pas les popups qui s'ouvrent sur clic utilisateur.

Pourquoi ne pas utiliser une simple boîte Javascript confirm() ?
Invité

Message par Invité »

J'y ai bien pensé.

Mais je trouve ça agressif et j'ai souvent l'impression que les gens cliquent sur n'importe quoi sans les lire...
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Chouette, il suffit de désactiver javascript (ou de naviguer au clavier) pour contourner le blocage :lol: :wink:

Pour déterminer si un script peut ouvrir une popup, il faut qu'il y ait action directe de l'utilisateur. Ce n'est visiblement pas le cas ici, vu qu'il y a une requête HTTP et des contrôles.
Si Firefox laissait passer ça, il laisserait passer énormément (tous en fait) de popups sur clics, donc serait quasi inefficace.

Je me demande si ça ne vient pas du fait que le window.open est dans une fonction.

Bref, c'est toujours le risque, trouver un juste milieu entre blocage efficace et ne pas bloquer ce qui est "juste". Il n'y a pas une belle limite entre les deux, donc forcément il y a des erreurs.

Le mieux est peut-être encore d'oublier la popup et de modifier la page elle-même. Dans ce cas, pas de blocage, que ce soit avec Firefox ou n'importe quel autre bloqueur de popups (je suis persuadé que tu ne les a pas tous testés :wink: )
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Pour une question à deux choix, il existe tout simplement une fonction DOM qui ne sera jamais bloquée. Par exemple c'est ce qu'utilisent GMail ou Dotclear quand on essaie de fermer une fenêtre contenant un texte non enregistré.
http://developer.mozilla.org/fr/docs/DOM:window.confirm
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités