facebook javascript sdk fb_xd_fragment?

时间:2010-06-02 04:27:55

标签: javascript facebook sdk

我正在使用facebook javascript sdk在我的页面中嵌入一个类似的按钮。

什么是fb_xd_fragment?我看到它附加到我的网址的末尾,如http://www.example.com/controller/?fb_xd_fragment,这导致了一些令人讨厌的递归重新加载页面。

9 个答案:

答案 0 :(得分: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 :(得分:3)

使用iframe按钮解决。

答案 2 :(得分:1)

可以在此处找到此错误的修复程序:

http://wiki.github.com/facebook/connect-js/custom-channel-url

答案 3 :(得分:1)

a1anm的链接有助于清理这造成的混乱,但有一种方法可以防止它发生。

将'channelUrl'设置为本地托管的频道页面。有关详细信息,请参阅http://threebrothers.org/brendan/blog/facebook-connect-ie-fb_xd_fragment-iframe/

答案 4 :(得分:1)

答案 5 :(得分:1)

我使用脚本中的方法将channelUrl定义到我网站上的页面,但我仍然有多次点击回到该页面。

在使用WireShark观察结果流量后,我发现他们(Facebook)使用channelUrl进行一些内部调用,同时传递fb_xd_fragment - 我将该URL用于channelUrl,将其重定向到我的网站。

我的网站上有多个Like按钮使用fbml而不是帧,而在IE7上,我不再使用fb_xd_fragment参数从Facebook获得回击。

不确定这是否是最佳做法,但似乎有效。

我为channelUrl设置了这个值:

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

希望这有帮助。

答案 6 :(得分:0)

虽然github的上述答案似乎是另一个问题的答案,但它确实运作良好。 更新:链接已损坏 - 请尝试http://blog.colnect.com/2010/10/fbxdfragment-bug-workaround.html

答案 7 :(得分:0)

在互联网上用所有解决方案进行了几天的研究和实验,最后我想出了这个的结合

更改页面的头部:

<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把它放在你想要的地方,按钮是:

<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

答案 8 :(得分:0)

Channel hack对我不起作用。 所以我刚刚在我的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();
}