Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire Cours JavaScript, FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 29/06/2009, 00h06   #1
Membre du Club
 
Date d'inscription: novembre 2006
Messages: 80
Par défaut Tracking adsense : ajouter un événement sur une iframe

Bonjour, je suis en train de faire un petit script de tracking des clics Adsense. Je m'inspire de ce script.

Voici mon code javascript :

Code :
function log_adsense(nom_iframe){
	bug = new Image();
	bug.src = '/etc/log_adsense.php?ref='
	+ document.location
	+ '&url=' + window.status
	+ '&name=' + nom_iframe;
}
 
window.onload = function(){
	var elements;
	elements = document.getElementsByTagName("iframe");
	for (var i = 0; i < elements.length; i++){
		if(
			(elements[i].src.indexOf('googlesyndication.com') > -1) ||
			(elements[i].src.indexOf('googleadservices.com') > -1) ||
			(elements[i].src.indexOf('googleads') > -1)
		){
			elements[i].onmouseup = log_adsense(elements[i].id);
		}
	}
}
Le fichier log_adsense.php se contente d'écrire quelques données dans un fichier texte.

La fonction log_adsense fonctionne très bien, par contre c'est le reste qui coince.

Quand je charge une page qui contient 2 ensembles adsense, le fichier texte est déjà rempli, alors que j'ai pas cliqué sur les annonces.

En c'est comme si il ne prenait pas en considération mon évènement onmouseup.

Comment faire ?

Merci
Galdon est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 00h32   #2
Membre habitué
 
Avatar de nod__
 
Date d'inscription: avril 2009
Localisation: Lille
Messages: 162
Par défaut

un truc dans ce genre là devrait faire l'affaire:
Code :
function log_adsense(){
	bug = new Image();
	bug.src = '/etc/log_adsense.php?ref='
	+ document.location
	+ '&url=' + window.status
	+ '&name=' + this.id;
}
 
window.onload = function(){
	var elements = document.getElementsByTagName("iframe"),
	    elem = null; // temporaire
	for (var i = 0, il = elements.length; i < il; i++){
		elem = elements[i];
		if(
			(elem.src.indexOf('googlesyndication.com') > -1) ||
			(elem.src.indexOf('googleadservices.com') > -1) ||
			(elem.src.indexOf('googleads') > -1)
		){
			elem.onmouseup = log_adsense;
		}
	}
}
J'en ai profiter pour optimiser un peu ta boucle. Sur 2 élements ça se voit pas trop, mais si tu fais toutes tes boucles comme tu as fait celle là, tu finira par avoir des problèmes de lenteur.

En ce qui concerne le problème, c'est que tu n'assignes pas de fonction à l'évènement onclick mais tu execute la fonction et tu assigne la valeur de retour (qui est undefined très certainement) à l'évènement. ça foire, normal. Il faut que tu passes une référence, ce que j'ai fais ici.

Au fait j'ai pu virer l'argument, puisque le this dans la fonction "log_adsense" pointe vers la même chose que le "elements[i]" au moment de l'itération. C'est pas très clair, mais c'est pas un comportement évident ces histoires en JS.
nod__ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 10h52   #3
Membre du Club
 
Date d'inscription: novembre 2006
Messages: 80
Par défaut

Ok, merci pour ton aide.

J'ai une question : comment faire pour assigner à un évènement (ici : onmouseup), une fonction en indiquant des paramètres à cette fonction ?

Parce que ma_fonction(param) ne fonctionne pas puisque comme tu l'as dit, ça exécute la fonction.



Sinon pour en revenir à mon problème, j'ai essayé avec ton code. Lors du chargement d'une page, rien n'est inscrit dans le fichier texte, jusque là ça va.

Par contre quand je clique dans une iframe adsense (sur le lien où dans le vide, sur le texte de description...), rien n'est enregistré dans le fichier texte.
Galdon est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 14h02   #4
Membre habitué
 
Avatar de nod__
 
Date d'inscription: avril 2009
Localisation: Lille
Messages: 162
Par défaut

normal, tu ne peux pas mettre de onclick sur une iframe. Il faut mettre l'évènement dans la page contenue dans l'iframe auquelle tu ne peux pas accéder pour des raisons de sécurité (c'est un autre domaine).

En clair : c'est pas possible avec onclick. Test avec onfocus comme dans l'article original.

pour passer des paramètres il faut faire :
Code :
elem.onfocus = function () {
    maFonction(mesParametres);
};
nod__ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 14h16   #5
Membre du Club
 
Date d'inscription: novembre 2006
Messages: 80
Par défaut

on focus ne fonctionne pas non plus

Ça veut dire qu'il est impossible de tracker les clics adsense tant que google utilisera des iframe pour afficher ses annonces ?

Il n'y a vraiment aucun moyen de vérifier le nombre de clics ?
Galdon est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 14h53   #6
Membre habitué
 
Avatar de nod__
 
Date d'inscription: avril 2009
Localisation: Lille
Messages: 162
Par défaut

Je suis pas le roi des iframes, mais honnetement je pense que c'est impossible.

Si quelqu'un d'autre à mieux… ?
nod__ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 16h04   #7
Membre du Club
 
Date d'inscription: novembre 2006
Messages: 80
Par défaut

Je ne suis pas un as du javascript, mais si j'encapsule toutes les annonces adsense dans un div, et que j'ajoute un événement onfocus dessus, ça pourrait fonctionner ?

(pour cela faudrait qu'il y ai une sorte d'héritage inverse dans les événements : onfocus sur l'iframe provoque onfocus aussi sur la div qui la contient).
Galdon est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/06/2009, 16h07   #8
Membre habitué
 
Avatar de nod__
 
Date d'inscription: avril 2009
Localisation: Lille
Messages: 162
Par défaut

non ça marche pas ça. Déjà essayer il y a quelques temps

En plus l'évènement focus ne se propage pas :p
nod__ est déconnecté   Envoyer un message privé Réponse avec citation
NEWS JAVASCRIPTF.A.Q JSTUTORIELS JSSOURCES JSLIVRES JS

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 02h09.


Vos questions techniques : forum d'entraide JavaScript - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.