Javascript:我的fbAsyncInit()方法永远不会被调用

时间:2012-02-07 21:23:30

标签: javascript facebook fbconnect fbjs

我正在Facebook开发者网站上的this page复制代码,fbAsyncInit()方法永远不会触发。我还阅读了this page,我已经通过几种不同的方式调整了代码,我无法解决这个问题。你的意见?

此外,值得一提的是,当我尝试运行此代码和Chrome(在Mac上)并运行Firebug lite时,我收到一条错误消息“无法在此页面中加载Firebug Lite”

这是代码......

<html>
<head>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '1234567890', // App ID
      channelUrl : '//localhost/test.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

    alert("this statement never gets called either");
  };

  // Load the SDK Asynchronously
  (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>
</script>
</body>
</html>

6 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。在异步加载之前,似乎我在其他地方加载了JavaScript库//connect.facebook.net/en_US/all.js

这可能会让人感到困惑。

我删除了过早的加载标记定义,现在我很好。

答案 1 :(得分:5)

您是否遇到同步加载问题?

    <script src="//connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
    appId      : 'YOUR_APP_ID',
    channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    xfbml      : true  // parse XFBML
  });
</script>

答案 2 :(得分:5)

你应该改变:

 js.src = "//connect.facebook.net/en_US/all.js";

为:

 js.src = "http://connect.facebook.net/en_US/all.js";

答案 3 :(得分:1)

这个答案可能为时已晚,而且对于很多情况都不会有帮助,但我发现我的Firefox浏览器经过一些体面的工作后显然有点疯狂并导致错误...只是重启该死的东西

答案 4 :(得分:0)

由于您的文件都称为test.html,而channelUrl应该是test.html,因此您创建的是循环引用。对于正确的channelUrl,它应该只包含一行

<script src="//connect.facebook.net/en_US/all.js"></script>

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

  

频道文件解决了跨域通信的一些问题   在某些浏览器中。 channel.html文件的内容可以是   一行:

     

<script src="//connect.facebook.net/en_US/all.js"></script>

     

通道文件的缓存非常重要   可能。提供此文件时,您必须发送有效的Expires标头   期限很长。这将确保通道文件   浏览器缓存,这对于流畅的用户体验非常重要。   如果没有适当的缓存,跨域通信将变得非常   缓慢,用户将遭受严重退化的经历。一个简单的   在PHP中执行此操作的方法是:

 <?php  $cache_expire = 60*60*24*365;  header("Pragma: public");  header("Cache-Control: max-age=".$cache_expire);  header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');  ?>  <script src="//connect.facebook.net/en_US/all.js"></script>
  

channelUrl参数是可选的,但建议使用。提供一个   通道文件可以帮助解决三个特定的已知问题。第一,   包含跨帧通信的代码的页面可能会导致社交   没有channelUrl的插件显示为空白。第二,如果没有   提供channelUrl,页面包括自动播放音频或   视频,用户可能会听到两个音频流,因为页面有   已在背景中第二次加载跨域   通讯。第三,通道文件将阻止包含额外的   点击服务器端日志。如果你没有指定channelUrl,那么你   可以删除包含fb_xd_bust或fb_xd_fragment的页面视图   日志中的参数以确保正确计数。

     

channelUrl必须是与页面匹配的完全限定URL   你包括SDK。换句话说,通道文件域   如果您的网站使用www提供,并且如果您修改,则必须包含www   您的网页上的document.domain必须创建相同的document.domain   也改变了channel.html文件。协议也必须   比赛。如果您的网页是通过https投放的,那么您的channelUrl也必须是   HTTPS。请记住使用脚本src的匹配协议   好。上面的示例代码使用协议相对URL   正确处理大多数https案例。

答案 5 :(得分:0)

请更改您的应用ID然后开始工作

"workbench.colorCustomizations": {
       "tab.activeBackground": "#6bdc6b",
}