为什么我的Facebook Like按钮出现此错误?

时间:2011-08-25 22:49:57

标签: facebook-graph-api facebook facebook-fql

Uncaught ReferenceError: _onloadHook is not defined

为什么呢?我的代码如下:

<!DOCTYPE html  xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<html>
<head>
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
    <script type="text/javascript">
    //Initialize facebook
        FB.init({
            appId  : '12345',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true, // parse XFBML
            channelUrl : 'http://www.abc.com/channel.html', // channel.html file
        });
    </script>
</head>

<body>
<div id="fb-root"></div>
<fb:send href="http://abc.com/blah" font="lucida grande" ref="codes_popup"></fb:send>
<fb:send href="http://abc.com/blah" font="lucida grande" ref="codes_popup"></fb:send>
</body>
</html>

编辑:当我有多个时会发生这种情况。当我只有一个“发送”按钮时,错误就不存在了。

对于每个额外的“发送”按钮,都会发生错误。

4 个答案:

答案 0 :(得分:1)

这是Facebook平台中的一个错误;它已被报告为bug #20041

答案 1 :(得分:0)

将Facebook JS库和JS代码脚本放在 fb-root div下:

<!DOCTYPE html  xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<html>
<head>

</head>

<body>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
//Initialize facebook
    FB.init({
        appId  : 'XXX',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true, // parse XFBML
        channelUrl : 'http://www.abc.com/channel.html', // channel.html file
    });
</script>
<fb:send href="http://abc.com/blah" font="lucida grande" ref="codes_popup"></fb:send>
</body>
</html>

答案 2 :(得分:0)

我今天收到了完全相同的错误。

正如我们提到的那样,FB文档说你需要在<script>下放置FB <div id="fb-root"></div>标签。但是,在他的示例和FB文档中,他们将脚本直接放在<div id="fb-root"></div>下。我这样做,仍然得到OP提到的错误。我终于能够通过将FB <script>标记移动到页面的最底部,就在结束</body>标记之前解决问题。我相信发生的事情是我的其他一些脚本干扰了FB脚本的加载。希望有所帮助。

答案 3 :(得分:0)

您应该使用升级的异步方法调用facebook javascript。这将确保加载整个DOM,以便fb:root已经在页面上。

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

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId  : 'YOUR 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.yourdomain.com/channel.html', // Custom Channel URL
      oauth : true //enables OAuth 2.0
    });
  };

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

同样非常重要的是添加对OAuth 2.0 http://developers.facebook.com/blog/post/525/

的支持
oauth : true

截至10月1日,如果您没有,您的应用将无法正常运行。