发送按钮显示很奇怪 - 解决方法?

时间:2011-09-16 19:48:55

标签: facebook facebook-like

我像这样指定Facebook喜欢/发送按钮:

<fb:like href="[URL]" show_faces="false" width="428" action="recommend" font="tahoma" send="true"></fb:like>

在显示这些按钮的过程中,它们会经历以下三种视觉状态:

1)首先发送按钮和推荐按钮与发送按钮并排显示。

2)推荐按钮和发送按钮切换位置,但发送按钮显示在预期显示位置下方。

3)当发送按钮向上移动时,推荐按钮和发送按钮正常并排显示。

这是一个异常,我可以通过指定按钮来做一些事情,还是我需要等待来自Facebook的修复?

在编辑时,这是我正在使用的代码......

在body标签之后,我有(使用尖括号编辑特定于站点的信息)...

<div id="fb-root"></div>
<script language="javascript" type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId: '<appid>',
      status: true,
      cookie: true,
      xfbml: true,
      channelUrl: '<siteroot>/channel.html',
      oauth: true
    });
    FB.Event.subscribe('edge.create', function(href, widget) {
      _gaq.push(['_trackEvent', 'facebook', 'like', href]);
    });
  };

  (function(d) {
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('head')[0].appendChild(js);
  }(document));
</script>

按钮代码如下:

<fb:like href="<pageurl>" show_faces="false" width="428" action="recommend" font="tahoma" send="true"></fb:like>

1 个答案:

答案 0 :(得分:0)

我自己并没有看到这个,但听起来像是fb:like标签在整个页面呈现之前填充的东西。你是如何调用初始化标签的javascript的?您可以尝试在window.onload事件中进行设置,以便在页面完全加载之前不会运行。

要尝试的一些事项:

<fb:like>标记括在宽度为428px的div中。

将async = true更改为async = false(暂时只是为了解决问题)。

同样,尝试将async = true转换为defer = true。

将代码布局更改为:

<head>
<script type='text/javascript' src='http://connect.facebook.net/en_US/all.js' defer='defer'></script>
</head>
<body>
<div id="fb-root"></div>
<script language="javascript" type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId: '<appid>',
      status: true,
      cookie: true,
      xfbml: true,
      channelUrl: '<siteroot>/channel.html',
      oauth: true
    });
    FB.Event.subscribe('edge.create', function(href, widget) {
      _gaq.push(['_trackEvent', 'facebook', 'like', href]);
    });
  };
</script>

或者甚至可以这样:

<head>
window.onload=function() {
    d=document;
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
    js = d.createElement('script'); js.id = id; js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    d.getElementsByTagName('body')[0].appendChild(js);
  };
</head>
<body>
<div id="fb-root"></div>
<script language="javascript" type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId: '<appid>',
      status: true,
      cookie: true,
      xfbml: true,
      channelUrl: '<siteroot>/channel.html',
      oauth: true
    });
    FB.Event.subscribe('edge.create', function(href, widget) {
      _gaq.push(['_trackEvent', 'facebook', 'like', href]);
    });
  };
</script>