Facebook Javascript api没有加载

时间:2012-04-30 19:11:09

标签: javascript facebook facebook-graph-api facebook-javascript-sdk

这是我的代码:

<!DOCTYPE html>
<html xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>New JavaScript SDK & OAuth 2.0 based FBConnect Tutorial |     
Thinkdiff.net</title>
</head>

<body>

<div id="fb-root"></div>

<script>

  window.fbAsyncInit = function() {
  FB.init({
  appId      : '154062364721089', // 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
  oauth: true
  });

  // Additional initialization code here

   alert('Api loaded');

   FB.login(function(response)
   {
    console.log(response);
   });

   };

  // Load the SDK Asynchronously
 (function(d){
 var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
 if (d.getElementById(id)) {return;}
 js = d.createElement('script'); js.id = id; js.async = true;
 js.src = "connect.facebook.net/en_US/all.js";
 ref.parentNode.insertBefore(js, ref);
 }(document));

</script>

test

</body>
</html>

但是当我在浏览器中打开此文件时,Facebook api无法加载。我只是看到屏幕上印有“测试”。我相信浏览器应该联系facebook来加载api - 我认为这将被称为浏览器底部的连接消息,这是没有发生的。

3 个答案:

答案 0 :(得分:2)

解决JavaScript中的错误应该是首先要解决的问题。您的代码缺少FB.init()调用中最后两个字典元素之间的逗号(xfbml和oauth)

编辑您在IE和Chrome中使用的代码工作正常,除非您从本地计算机上运行它(即双击光盘上的HTML文件),因为' //'加载API时在URL中

答案 1 :(得分:1)

听起来你期待Facebook自动提示用户连接/允许/登录应用程序。为此,您需要在fb api初始化之后添加以下内容(代码在// Additional initialization code here之后)...

// Additional initialization code here

alert('Api loaded');

FB.login(function(response)
{
    console.log(response);
});

修改:此外,请尝试删除<script>引用并使用facebook文档中的异步代码 - https://developers.facebook.com/docs/reference/javascript/

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

答案 2 :(得分:1)

不确定这是否完全相关,找到了这个帖子,因为我在“js = d.createElement('script'); js.id = id; js.async = true;

”之后得到“js未定义”

原来解决方案是行:if (d.getElementById(id)) {return;}需要后跟;,而不是在括号内:

if (d.getElementById(id)) {return;};

if (d.getElementById(id)) {return};

工作,而:

if (d.getElementById(id)) {return;}

引发错误..