Hoe voeg je een Facebook “Vind ik leuk”-knop toe aan een AJAX-gestuurde pagina

Ik heb het net en Stack Overflow doorzocht en heb geen adequaat antwoord op deze vraag gevonden. Voordat ik begon met het proces van vallen en opstaan ​​​​om mijn eigen oplossing te vinden, dacht ik dat ik me zou wenden tot het Stack Overflow-breintrust en kijken of er al een succesvolle implementatie was.

Ik heb een door AJAX aangedreven pagina die naar behoren verslechtert voor niet-javascript-browsers en SEO. Elke klik in de AJAX-versie kan worden weergegeven door een unieke URL.

Wat ik wil doen, is de HREF van de knop dynamisch wijzigen. Ik begrijp wel dat deze tag tijdens runtime wordt omgezet naar standaard HTML (namelijk naar een vervelende tabel/iframe-layout).

Ik vroeg me af of iemand enig idee heeft hoe deze FB-like-knop op AJAX-aangedreven pagina’s kan worden geïmplementeerd?

Proficiat bij voorbaat 🙂

BEWERKEN:

Wat vind je van deze methode die ik zojuist heb gehackt? Zie je er grote problemen mee?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="JS/jquery/jquery.js" type="text/javascript"></script>
    <script src="https://connect.facebook.net/en_US/all.js#xfbml=1"></script>
    <script language="javascript" type="text/javascript">
        $("document").ready
        (
            function ()
            {
                CreateNewLikeButton("http://www.yahoo.com")
                $("a#ChangeToGoogle").click
                (
                    function (e)
                    {
                        e.preventDefault();
                        CreateNewLikeButton("http://www.google.ca")
                    }
                );
            }
        );
        function CreateNewLikeButton(url)
        {
            var elem = $(document.createElement("fb:like"));
            elem.attr("href", url);
            $("div#Container").empty().append(elem);
            FB.XFBML.parse($("div#Container").get(0));
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <a id="ChangeToGoogle" href="#">Change To Google</a>
    <div id="Container">
        <fb:like href="http://www.NEVER_LINK_TO_THIS_12345.com"></fb:like>
    </div>
    </form>
</body>
</html>

Antwoord 1, autoriteit 100%

EENVOUDIGE OPLOSSING

Gewoon ontleden, activeer de ontledingsfunctie wanneer het laden is voltooid.

Als je jQuery gebruikt, is er een heel gemakkelijke en handige oplossing voor dit probleem:

$(document).ajaxComplete(function(){
    try{
        FB.XFBML.parse(); 
    }catch(ex){}
});

http://developers.facebook.com/docs/reference/plugins/like /


Antwoord 2, autoriteit 17%

Dit is de oplossing waar ik uiteindelijk voor koos:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="JS/jquery/jquery.js" type="text/javascript"></script>
    <script src="https://connect.facebook.net/en_US/all.js#xfbml=1"></script>
    <script language="javascript" type="text/javascript">
        $("document").ready
        (
            function ()
            {
                CreateNewLikeButton("http://www.yahoo.com")
                $("#ChangeToGoogle").click
                (
                    function (e)
                    {
                        e.preventDefault();
                        CreateNewLikeButton("http://www.google.ca")
                    }
                );
            }
        );
        function CreateNewLikeButton(url)
        {
            var elem = $(document.createElement("fb:like"));
            elem.attr("href", url);
            $("#Container").empty().append(elem);
            FB.XFBML.parse($("#Container").get(0));
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <a id="ChangeToGoogle" href="#">Change To Google</a>
    <div id="Container">
        <fb:like href="http://www.NEVER_LINK_TO_THIS_12345.com"></fb:like>
    </div>
    </form>
</body>
</html>

Antwoord 3

Je maakt het jezelf moeilijk – maak gewoon een nieuwe iframe-gebaseerde versie.

<html>
<head>
  <title>Test Page</title>
  <script src="https://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript">  
  $(function()
  {
    $( '#ChangeToGoogle' ).click( function( event )
    {
      event.preventDefault();
      $( '#Container' ).empty().append( $('<iframe />')
        .attr( 'src', 'http://www.facebook.com/plugins/like.php?href=www.google.com&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80' )
        .attr( 'scrolling', 'no' )
        .attr( 'frameborder', 'no' )
        .attr( 'style', 'border:none; overflow:hidden; width:450px; height:80px;' )
        .attr( 'allowTransparency', 'true' )        
      );            
    });
  });
  </script>
</head>
<body>
    <form id="form1" runat="server">
    <a id="ChangeToGoogle" href="#">Change To Google</a>
    <div id="Container">
      <iframe src="https://www.facebook.com/plugins/like.php?href=www.yahoo.com&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80"
        scrolling="no" frameborder="0"
        style="border:none; overflow:hidden; width:450px; height:80px;"
        allowTransparency="true">
      </iframe>
    </div>
    </form>
</body>


Antwoord 4

Dit is hoe ik met deze situatie omging toen ik deze tegenkwam – lijkt goed te werken.

// Set Facebook Like Button with jQuery
setFBLikeButtons = function (container,url,send,layout,width,show_faces,font) {
  // Set Default Args
  if(!send) { send = "false"; }
  if(!layout) { layout = "button_count"; }
  if(!width) { width = "100"; }
  if(!show_faces) { show_faces = "false"; }
  if(!font) { font = "arial"; }
  $(container).empty(); // Remove current like button
  $(container).html('<fb:like href="'+url+'" send="'+send+'" 
       layout="'+layout+'" width="'+width+'" show_faces="'+show_faces+'" 
       font="'+font+'"></fb:like>');
  FB.XFBML.parse(); // This is the magical syrup
}

Antwoord 5

maak like-knop

<head>
<script src="https://connect.facebook.net/en_US/all.js#xfbml=1"></script>
<script>
window.onload = function(){
var divs = document.getElementsByTagName("span");
for(var i=0; i<divs.length i++){
if(divs[i].className == "likes"){
if(divs[i].title){ var Href = divs[i].title; }else{ var Href = window.location; }
var fb_like = document.createElement("fb:like");
fb_like.setAttribute("href", Href);
fb_like.setAttribute("layout", "box_count");
fb_like.setAttribute("show_faces", "false");
fb_like.setAttribute("width", "55");
document.getElementById("likes2").appendChild(fb_like);
}
}
}
</script>
</head>
<body>
<span class="likes" title="www.bzzs.me"></span>
</body>

Antwoord 6

Laad het nadat het venster is geladen, dit is wat voor mij werkt:

$(window).load(function(){
     $.getScript('http://connect.facebook.net/en_US/all.js', function() {
          try{
                FB.XFBML.parse();
            } catch(ex) {}
      });
});

Other episodes