2010-09-15 6 views
21

Je voudrais faire quelque chose sur la page quand un utilisateur clique sur "J'aime".Attachez un événement click() au bouton "Like" de FaceBook?

Je pensais que quelque chose de simple comme ce qui suit fonctionnerait:

<script type="text/javascript"> 
    $(document).ready(function() { 

     $('.connect_widget_like_button clearfix like_button_no_like').live('click', function() { 
      alert('clicked'); 
     }); 
    }); 
</script> 

C'est le iFrame qui fournit FaceBook pour ajouter le bouton comme à la page:

<iframe 
    id="FBLike" 
    src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.MySite.Com... blahblahblah" 
    scrolling="no" 
    frameborder="0" 
    style="border:none; overflow:hidden; width:450px; height:80px;" 
    allowTransparency="true"> 
</iframe> 

Mon script tente de lier un cliquez sur l'événement dans une balise d'ancrage chargée dans l'iFrame lors du chargement de la page. Cela ne fonctionne pas cependant. Y a-t-il un moyen pour que jQuery reconnaisse quand on clique dessus? Merci

Répondre

34

API Facebook ne vous permet de vous abonner à l'événement en cliquant comme, mais il vous permet de vous abonner à l'comme événement se produise (tiré lorsque l'action comme terminée):

FB.Event.subscribe('edge.create', function(response) { 
    // like clicked 
}); 

voir here.

+0

mais cela ne peut pas être fait dans un onglet, non? d'autres solutions comme à http://www.facebook.com/901Tequila?v=ap4904458780, où en cliquant sur le bouton J'aime vous redirige vers le mur de broche? – SteMa

+3

ne fonctionne pas pour iframe, seul XFBML fb: comme –

+1

fonctionne mais a tiré comme 3 secondes après avoir cliqué dans mon application. –

3

Vous ne pouvez pas utiliser JavaScript pour accéder aux éléments d'un iframe qui n'appartient pas à l'URL en cours, car je suppose que le domaine que vous utilisez n'est pas facebook.com, vous ne pourrez pas joindre un événement à la comme bouton de cette façon.

4

Faire un PHP (ou quelle que soit la langue que vous utilisez) script pour CURL la source de http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.MySite.Com... blahblahblah

Mettez la source de facebook dans votre page html, vous pouvez alors vous pouvez faire ce que vous voulez en JavaScript/JQuery avec le code de Facebook.

Quelques exemples pour CURL au sein de PHP - http://www.php.net/manual/en/curl.examples.php

+0

C'est un joli travail sournois autour, agréable :-) –

+0

Il est également plus susceptible d'être contre leur TOS/politique. –

+0

J'ai de sérieux doutes que quelque chose comme ça fonctionnerait. Il ferait comme un bouton spamable et Facebook ne peut pas le permettre. – Denis

2

On peut détecter « comme » et « contrairement » cas de facebook comme le bouton en utilisant respectivement edge.create et edge.remove.

+0

Je n'étais pas au courant de l'événement 'edge.remove'. avez vous un lien? –

-1

J'ai trouvé un moyen de contourner ce problème qui fonctionne bien avec iframe. Il est basé sur une combinaison de solutions suggérées ici à pile-débordement. La première étape consiste à compter le nombre de likes sur une page. Puis stocker ce nombre dans la variable globale. Vous pouvez le faire pendant l'événement de chargement. Deuxièmement, utilisez la solution suggérée sur ce lien Detect Click into Iframe using JavaScript. Lorsqu'une souris quitte une zone spécifique, vous pouvez déterminer si le nombre de clics a changé en fonction du nombre de clics précédents et du nombre actuel de clics. Le code pour déterminer le nombre de clics est disponible sur ce lien http://jsfiddle.net/Takazudo/ function fetchLikeCount(url){ return $.Deferred(function(defer){ $.ajax({ dataType: 'jsonp', url: 'https://api.facebook.com/method/fql.query?callback=callback', data: { query: 'SELECT like_count FROM link_stat WHERE url="' + url + '"', format: 'JSON' } }).then(function(res){ try{ var count = res[0].like_count; defer.resolve(count); }catch(e){ reject(); } }, reject); function reject(){ defer.reject(';('); }; }).promise(); }.

Questions connexes