Javascript:我的fbAsyncInit()方法从未被调用

Javascript: My fbAsyncInit() method never gets called

本文关键字:调用 方法 我的 fbAsyncInit Javascript      更新时间:2023-09-26

我正在Facebook的开发者网站上复制这个页面上的代码,fbAsyncInit()方法永远不会启动。我也读过这个页面,我对代码进行了很多不同的调整,但我无法启动该方法。你的想法?

此外,值得一提的是,当我尝试运行此代码和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>

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

这可能让事情有点混乱。

我删除了过早加载标签的定义,现在我没事了。

您应该更改:

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

至:

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

同步加载有问题吗?

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

这个答案可能太晚了,在很多情况下都无济于事,但是,我发现我的Firefox浏览器在做了一些不错的工作后,显然变得有点疯狂,并导致了确切的错误。。。只需重新启动

由于您的文件名为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服务的,并且如果您修改document.domain您必须制作相同的document.domainchannel.html文件中的更改。协议还必须火柴如果您的页面是通过https提供的,您的channelUrl也必须是https。记住使用脚本src的匹配协议好上面的示例代码使用与协议相关的URL正确处理大多数https情况。

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

  <script>
  window.fbAsyncInit = function() {
    FB.init({
      appId            : 'your-app-id',
      autoLogAppEvents : true,
      xfbml            : true,
      version          : 'v2.11'
    });
  };
  (function(d, s, id){
     var js, fjs = d.getElementsByTagName(s)[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement(s); js.id = id;
     js.src = "https://connect.facebook.net/en_US/sdk.js";
     fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>