2010-06-02 75 views
23

我正在使用facebook javascript sdk在我的頁面中嵌入一個類似按鈕。facebook javascript sdk fb_xd_fragment?

什麼是fb_xd_fragment?我看到它追加到我的網址的末尾,如http://www.example.com/controller/?fb_xd_fragment,這導致一些討厭的遞歸重新加載頁面。

+1

我得到相同的行爲,服務器遇到兩個請求 - 1與標準的URI;另一個使用URI?fb_xd_fragment。然而,這似乎只發生在IE - 更具體的IE7。你有沒有設法獲得更多的信息呢?所有這些都來自FB:http://forum.developers.facebook.com/viewtopic.php?pid=232516並且打開了一個錯誤:http://bugs.developers.facebook.com/show_bug.cgi?id=9777 – 2010-06-24 09:46:31

+1

是的,對於IE7非常具體,我使用了Iframe版本,希望有人會修復這個錯誤。 – 2010-06-27 22:10:21

回答

23

幾個星期試圖找到一個解決方案,它看起來像需要什麼之後是這裏提到的自定義頻道網址:

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

我所做的只是創建channel.html文件,其中包含此單行:

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

然後,我添加了channelUrl:行,以便最後的結果是這樣的:

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

確保在xfbml後添加逗號:如果它是最後一行,則爲true。我不熟悉Javascript,所以我不知道我是否充分利用了這一點,但我知道它防止了fb_xd_fragment問題,並允許在IE中使用FB註釋。據我所知,這是在線提供的唯一解決方案。任何進一步的調整是受歡迎的。

+1

我這樣做了,並且還在我的標記中添加了xmlns:fb =「http://www.facebook.com/2008/fbml」,現在它正在工作!非常討厭的問題。我添加了你在那裏發佈的代碼,然後在頁面的下面打印出一個像框和評論框。 – 2011-03-16 12:09:29

+0

你在channelURL中輸入的最終URL是什麼?我們在這裏試過了,在我們的服務器上有一個自定義的html頁面,它試圖創建一個「Facebook頁面」,真的很奇怪。 – Allov 2011-04-08 17:38:10

+0

我不得不添加xmlns:fb =「facebook.com/2008/fbml」;正如費蘭所做的那樣,或者它會不斷地進行民意調查這是修復它的最後一點:) – Designer023 2012-06-26 10:06:31

0

要約在幾天的研究和expriment與去年互聯網上所有的解決方案,我想出這個

變化結合您的網頁你的頭:

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

這裏cocde把這個地方你想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> 

信用惠康:http://www.xaluan.com

0

海峽黑客並沒有爲我工作。 所以,我只是在上面我的PHP所有其他內容文件添加一些代碼,301重定向到URL不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

與像按鈕的iframe解決。

1

我使用腳本內的方法來定義channelUrl到我網站上的一個頁面,但我仍然有多個命中返回到該頁面。我注意到他們(Facebook)使用channelUrl進行了一些自己的內部調用,同時也傳遞了fb_xd_fragment - 我改用channelUrl的URL,將它從我的站點重定向。

我有我的網站上使用fbml而不是框架的多個Like按鈕,並且在IE7上,我不再使用fb_xd_fragment參數從Facebook獲得回擊。

不知道這是否是最佳做法,但它似乎工作。

我設置了channelUrl這個值:

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

希望這有助於。