2010-06-02 26 views
23

Używam facebook javascript sdk do osadzenia podobnego przycisku na mojej stronie.facebook javascript sdk fb_xd_fragment?

Co to jest fb_xd_fragment? Widzę, że dołącza się do końca mojego adresu URL, takiego jak http://www.example.com/controller/?fb_xd_fragment, i powoduje to pewne nieprzyjemne rekurencyjne przeładowanie strony.

+1

Otrzymuję to samo zachowanie, serwer otrzymuje dwa żądania - 1 ze standardowym identyfikatorem URI; drugi z URI? fb_xd_fragment. Jednak wydaje się, że dzieje się to tylko w IE - dokładniej IE7. Czy udało Ci się uzyskać więcej informacji na ten temat? Wszystko z FB: http://forum.developers.facebook.com/viewtopic.php?pid=232516 i otwarty błąd: http://bugs.developers.facebook.com/show_bug.cgi?id=9777 –

+1

Tak, bardzo specyficzne dla IE7, użyłem zamiast tego wersji Iframe, mam nadzieję, że ktoś naprawi ten błąd. –

Odpowiedz

23

Po wielu tygodniach starając się znaleźć rozwiązanie wygląda na to, co jest potrzebne, to url niestandardowy kanał jak wspomniano tutaj:

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

Wszystko zrobiłem było stworzenie channel.html plik zawierający ten pojedynczy linia:

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

Potem dodał channelUrl: linia więc wynik końcowy wygląda tak:

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

Upewnij się, że dodajesz przecinek po xfbml: true, jeśli była to twoja ostatnia linia. Nie znam JavaScriptu, więc nie wiem, czy w pełni go wykorzystuję, ale wiem, że zapobiega on problemowi fb_xd_fragment i pozwala na komentarze FB w IE. O ile mogę powiedzieć, jest to TYLKO rozwiązanie dostępne w Internecie. Wszelkie dalsze poprawki są mile widziane.

+1

Zrobiłem to i dodałem xmlns: fb = "http://www.facebook.com/2008/fbml" do mojego tagu i działa już teraz! Bardzo denerwujący problem. Dodałem kod, który tam publikujesz, a następnie poniżej na stronie właśnie wydrukowano takie pole i pole komentarza. –

+0

Jaki jest końcowy URL, który wstawiasz do channelURL? Wypróbowaliśmy to tutaj, używając niestandardowej strony html na naszym serwerze i próbuje stworzyć "stronę na Facebooku", naprawdę dziwaczną. – Allov

+0

Musiałem dodać xmlns: fb = "facebook.com/2008/fbml"; jak to zrobił Ferran, albo ciągle będzie głosował. To był ostatni kawałek, który naprawił to :) – Designer023

0

affer kilka dni badań i expriment ze wszystkimi rozwiązania na internecie w ostatnim wymyślić połączyć tego

zmienić głowę swojej stronie:

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

tu cocde umieścić to gdzie chcesz przycisk likeit jest:

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

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

0

Kanał Hack nie działa dla mnie. Więc po prostu dodaje się przede wszystkim innych treści w moim PHP złożyć jakiś kod, który przekierowuje do 301 URL bez dodatku 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

rozwiązany z iframe jak przycisk.

1

Użyłem podejścia w skrypcie do zdefiniowania channelUrl na stronie w mojej witrynie, ale wciąż mam wiele trafień z powrotem na tę stronę.

Po obejrzeniu wynikłego ruchu za pomocą WireSharka, zauważyłem, że oni (Facebook) używają funkcji channelUrl dla niektórych własnych połączeń wewnętrznych, również przekazując fb_xd_fragment - zamiast tego użyłem tego adresu URL dla channelUrl, przekierowując go z mojej strony.

Mam wiele przycisków Like w mojej witrynie przy użyciu fbml zamiast ramek, a na IE7, nie otrzymuję już trafienia z Facebooka z parametrem fb_xd_fragment.

Nie jestem pewien, czy to najlepsza praktyka, ale wygląda na to, że działa.

ustawić tę wartość dla channelUrl:

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

nadzieję, że to pomaga.

Powiązane problemy