2010-06-02 10 views
23

Ich benutze das Facebook Javascript sdk, um eine ähnliche Schaltfläche in meine Seite einzubetten.facebook javascript sdk fb_xd_fragment?

Was ist fb_xd_fragment? Ich sehe es an das Ende meiner URL wie http://www.example.com/controller/?fb_xd_fragment angehängt, und dies verursacht einige böse rekursive Neuladen der Seite.

+1

Ich bekomme das gleiche Verhalten, der Server wird mit zwei Anfragen getroffen - 1 mit der Standard-URI; der andere mit URI? fb_xd_fragment. Dies scheint jedoch nur im IE zu passieren - genauer IE7. Hast du es geschafft, mehr Infos dazu zu bekommen? Alles da ist von FB: http://forum.veloper.facebook.com/viewtopic.php?pid=232516 und ein Bug geöffnet: http://bugs.developers.facebook.com/show_bug.cgi?id=9777 –

+1

Ja, sehr spezifisch für IE7, ich habe stattdessen die Iframe-Version verwendet, hoffentlich wird jemand diesen Fehler beheben. –

Antwort

23

Nach vielen Wochen zu versuchen, eine Lösung es sieht aus wie zu finden, was benötigt wird, ist ein URL benutzerdefinierten Channel wie hier erwähnt:

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

Alles, was ich war, die channel.html Datei mit diesem einzigen erstellt haben Leitung:

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

Dann habe ich die channelUrl: Linie so sieht das Endergebnis wie folgt aus:

<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> 

Achten Sie darauf, nach xfbml: true ein Komma hinzuzufügen, wenn es Ihre letzte Zeile war. Ich bin nicht vertraut mit Javascript, also weiß ich nicht, ob ich das voll ausnutze, aber ich weiß, dass es das fb_xd_fragment Problem verhindert und FB Kommentare in IE erlaubt. Soweit ich das beurteilen kann, ist dies die einzige online verfügbare Lösung. Weitere Verbesserungen sind willkommen.

+1

Ich habe dies und fügte auch xmlns: fb = "http://www.facebook.com/2008/fbml" in meine -Tag, und es funktioniert jetzt! Sehr nerviges Problem. Ich habe den Code, den Sie dort gepostet haben, hinzugefügt und dann unten auf der Seite nur eine ähnliche Box und ein Kommentarfeld gedruckt. –

+0

Wie lautet die finale URL, die Sie in channelURL eingeben? Wir haben das hier versucht, mit einer benutzerdefinierten HTML-Seite auf unserem Server und es versucht, eine "Facebook-Seite" zu erstellen, wirklich komisch. – Allov

+0

Ich musste die xmlns hinzufügen: fb = "facebook.com/2008/fbml"; wie Ferran es tat oder es ständig erfragen würde. Das war das letzte Bit, das es behoben hat :) – Designer023

0

affer paar Tage Forschung und expriment mit allen Lösung im Internet ich endlich dieses

Wechsel mit kombinieren kommen den Kopf Ihrer Seite:

<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"> 

hier die cocde diese setzen, wo Sie wollen likeit Taste ist:

<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> 

Kredit willkommen: http://www.xaluan.com

0

Der Kanal Hack nicht für mich arbeiten. Also habe ich nur vor allem anderen Inhalt in meinem PHP einig Code-Datei hinzugefügt, dass 301 an die URL umleitet ohne fb_xd_fragment Zusatz:

$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

mit dem iframe wie Taste gelöst.

1

verwenden ich den Ansatz im Skript die channelUrl auf einer Seite auf meiner Website zu definieren, aber ich habe noch mehrere Treffer zurück zu dieser Seite.

Nachdem ich den resultierenden Verkehr mit WireShark gesehen habe, habe ich bemerkt, dass sie (Facebook) ein channelUrl für einige ihrer internen Aufrufe verwenden und auch fb_xd_fragment weiterleiten - ich habe stattdessen die URL für channelUrl verwendet, um sie von meiner Site wegzuleiten.

Ich habe mehrere Like-Schaltflächen auf meiner Website mit fbml anstelle von Frames, und auf IE7, bekomme ich nicht mehr einen Treffer zurück von Facebook mit dem fb_xd_fragment-Parameter.

Nicht sicher, ob dies die beste Vorgehensweise ist, aber es scheint zu funktionieren.

stelle ich diesen Wert für die channelUrl:

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

Hoffnung, das hilft.