2016-09-10 104 views
0

我试图简单地使用JavaScript/Typescript发布到Facebook。Facebook SDK不能与Javascript一起工作

但是没有任何工作。

这是我的打字稿代码:

(window as any). //couldn't get code to compile without this... 

window.fbAsyncInit = function() { 
    FB.init({ 
     appId: 'MY API KEY', 
     xfbml: true, 
     version: 'v2.7' 
    }); 
}; 

(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 = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

declare var FB:any; 
// Only works after `FB.init` is called 
function myFacebookLogin() { 
    FB.login(function(){ 
     // Note: The call will only work if you accept the permission request 
     FB.api('/me/feed', 'post', {message: 'Hello, world!'}); 
    }, {scope: 'publish_actions'}); 
} 

而我的HTML:

<script src="./js/main.js"></script>  

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

<button onclick="myFacebookLogin()">Login with Facebook</button>  
<div id="status"> 
</div>  
</body> 
</div> 
</html> 

我从Facebook的开发者网站上面的代码。

+0

可以更具体吗?什么不工作? –

+0

我相信这是一个弹出窗口要求您登录,但在浏览器中打开html时根本没有任何反应。 – user2203633

+0

你检查过浏览器控制台吗?这是你需要做的第一件事,总是。 – luschn

回答

0

首先,你不需要投windowany,你可以这样做:

interface Window { 
    fbAsyncInit:() => void; 
} 

那么这应该工作:

window.fbAsyncInit = function() { 
    FB.init({ 
     appId: 'MY API KEY', 
     xfbml: true, 
     version: 'v2.7' 
    }); 
}; 

至于登录,根据the docs你缺少处理错误的部分。您传递给FB.login的函数接收response与您可以检查状态:

function myFacebookLogin() { 
    FB.login(function(response) { 
     if (response.authResponse) { 
      FB.api('/me/feed', 'post', { 
       message: 'Hello, world!' 
      }); 
     } else { 
      console.log('User cancelled login or did not fully authorize.'); 
     } 
    }, {scope: 'publish_actions'}); 
} 

现在,你就会知道,如果登录失败。

+0

当我点击“与Facebook登录”仍然没有得到什么。 – user2203633

+0

控制台中没有任何东西? –

相关问题