2010-06-02 131 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'

希望这有助于。