2010-06-02 7 views
23

Sto usando il javascript sdk di Facebook per incorporare un pulsante mi piace nella mia pagina.facebook javascript sdk fb_xd_fragment?

Che cos'è fb_xd_fragment? Vedo che si aggiunge alla fine del mio url come http://www.example.com/controller/?fb_xd_fragment, e questo sta causando un brusco ricorsivo ricaricamento della pagina.

+1

Sto ottenendo lo stesso comportamento, il server viene colpito con due richieste - 1 con l'URI standard; l'altro con URI? fb_xd_fragment. Tuttavia questo sembra accadere solo in IE - in particolare IE7. Sei riuscito a ottenere maggiori informazioni su questo? Tutto quello che c'è da FB: http://forum.developers.facebook.com/viewtopic.php?pid=232516 e un bug aperto: http://bugs.developers.facebook.com/show_bug.cgi?id=9777 –

+1

Sì, molto specifico per IE7, ho usato la versione Iframe, spero che qualcuno possa risolvere il problema. –

risposta

23

Dopo molte settimane di cercare di trovare una soluzione sembra che ciò che è necessario è un URL canale personalizzato come detto qui:

http://developers.facebook.com/docs/reference/javascript/FB.init

Tutto quello che ho fatto è stato creare il file dichannel.html contenente questo singolo linea:

<script src="http://connect.facebook.net/en_US/all.js"></script> 

Poi ho aggiunto la channelUrl: la linea in modo che il risultato finale è simile al seguente:

<div id="fb-root"></div> <script> 
window.fbAsyncInit = function() { 
    FB.init({ 
     appId : 'MY APP ID', 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true, // parse XFBML 
     channelUrl : 'http://www.example.com/channel.html' // custom channel 
    }); }; 

    (function() { 
    var e = document.createElement('script'); 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
}());</script> 

Assicurarsi di aggiungere una virgola dopo xfbml: true se era l'ultima riga. Non ho familiarità con Javascript quindi non so se sto sfruttando appieno questo, ma so che previene il problema fb_xd_fragment e consente i commenti FB in IE. Per quanto posso dire, questa è l'UNICA soluzione disponibile online. Eventuali ulteriori ritocchi sono i benvenuti.

+1

Ho fatto questo e ho aggiunto anche xmlns: fb = "http://www.facebook.com/2008/fbml" nel mio tag , e funziona ora! Problema molto fastidioso. Ho aggiunto il codice che stai postando lì, e poi in basso sulla pagina ho appena stampato una scatola simile e una casella di commento. –

+0

Qual è l'URL finale che hai inserito in channelURL? L'abbiamo provato qui, con una pagina html personalizzata sul nostro server e tenta di creare una "pagina facebook", davvero strana. – Allov

+0

Ho dovuto aggiungere xmlns: fb = "facebook.com/2008/fbml"; come fece Ferran o avrebbe costantemente sondato. Questo è stato l'ultimo bit che l'ha risolto :) – Designer023

0

affer pochi giorni di ricerca e expriment con tutta la soluzione su internet finalmente vengo con combinare di questa

Modifica la testa della pagina:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" lang="en-US"> 

qui il cocde mettere questo in cui si desidera pulsante likeit è:

<div class="yourclass" style="z-index: 10;"> 
<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js" ></script> 
<script>FB.init({appId: '1234yourappidhere', status: true, cookie: true, xfbml: true});</script> 
<fb:like href="http..yourencodedurlswillputhere" layout="button_count" width="150" action="recommend" colorscheme="light"></fb:like></div> 
<script> document.getElementsByTagName('html')[0].style.display='block';</script> 

credito Wellcome: http://www.xaluan.com

0

Il Canale mod non ha funzionato per me. Così ho appena aggiunto sopra tutti gli altri contenuti nel mio PHP file di codice che reindirizza 301 all'URL senza l'aggiunta fb_xd_fragment:

$url = "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 

if (isset($_GET['fb_xd_fragment'])) { 
$url = str_replace("?fb_xd_fragment=","",$url); 
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: {$url}"); 
exit(); 
} 
3

risolto con l'iframe pulsante mi piace.

1

Ho utilizzato l'approccio all'interno dello script per definire il canaleUrl su una pagina del mio sito, ma ho ancora ricevuto più hit su quella pagina.

Dopo aver visto il traffico risultante con WireShark, ho notato che (Facebook) utilizza un canaleUrl per alcune delle proprie chiamate interne, passando anche fb_xd_fragment - Io invece ho usato quell'URL per il canaleUrl, reindirizzandolo dal mio sito.

Ho più pulsanti Mi piace sul mio sito utilizzando fbml invece di frame e su IE7, non ho più ottenuto un hit da Facebook con il parametro fb_xd_fragment.

Non sono sicuro se questa è la procedura consigliata ma sembra funzionare.

ho impostare questo valore per la channelUrl:

'http://static.ak.fbcdn.net/connect/xd_proxy.php'

Spero che questo aiuti.