0

请帮我。我知道这很简单,但我的运气不好:(

我正在尝试按照facebook 官方文档在我的网站中使用 JavaScript SDK 实现 facebook 登录。当我进入 mysite 登录页面时,Facebook 登录窗口会自动弹出。但我想在点击登录按钮后。

登录按钮:

<p class="fb_login">or <img src="assets/img/fb-login-button.jpg" onClick="FB.login()" onlogin="alert( 'Logged In' );"></p>

Javascript:

window.fbAsyncInit = function() {
    FB.init({
      appId      : '486435991400780', // App ID
      channelUrl : '//http://localhost/ride/assets/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
    });

    // Additional init code here
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            // connected
            replace_login();
            FB.api('/me', function(response) {
                console.log('Good to see you, ' + response.name + '.');
                alert('Good to see you, ' + response.name + '.');
            });
        } else if (response.status === 'not_authorized') {
            // not_authorized
            login();
        } else {
            // not_logged_in
            login();
        }
    });
  };

  function login() {
      FB.login(function(response) {
          if (response.authResponse) {
              // connected
              window.location.reload();
          } else {
              // cancelled
              alert('User cancelled login or did not fully authorize.');
          }
      });
  }

  function replace_login(){
       FB.api('/me', function(response) {
           $('.fb_login').html('<span class="fb_logged_in">' + response.name + ', You are already logged in with Facebook!</span>');
       });
  }

  // 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));

在我的 html 上:

<div id="fb-root"></div>
<script src="assets/js/fb-login.js" type="text/javascript"></script>

谢谢。

4

1 回答 1

2

检查登录状态后删除 javascript 中的“login()”调用,以便不会出现登录弹出窗口:

// Additional init code here
FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        // connected
        replace_login();
        FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.');
            alert('Good to see you, ' + response.name + '.');
        });
    }
});

添加一个按钮(最好使用 CSS 样式):

<button onclick="login();">Login with Facebook</button>

注意:如果用户已登录,则该按钮可能会被 javascript 隐藏(或者如果未登录,则添加该按钮)。

于 2012-12-22T08:49:44.033 回答