我正在使用facebook javascript sdk在我的页面中嵌入一个类似的按钮。
什么是fb_xd_fragment?我看到它附加到我的网址的末尾,如http://www.example.com/controller/?fb_xd_fragment,这导致了一些令人讨厌的递归重新加载页面。
答案 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>
答案 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();
}