FaceBook IFrame应用程序:getLoginStatus仅在Internet Explorer中失败

时间:2011-03-30 22:26:36

标签: javascript facebook facebook-graph-api

我有一个非常简单的facebook IFrame应用程序,用于检查当前用户是否登录到facebook。如果不是,我等待1秒,然后通过打开登录对话框提示他们登录。

当我在Firefox中运行我的应用程序时,这一切都非常有效。在Chrome中。但是当我在Internet Explorer中运行它时,Javascript函数isLoggedIn()在我使用该行后失败/中断

FB.getLoginStatus( function(response) {

为什么你认为这种情况会发生?你知道我怎么解决这个问题吗? PS:我正在使用facebook Graph API的Javascript SDK。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>IFRame Test</title>
    <script type="text/javascript">

        function loginUser()
        {
            alert( "Running loginUser()" );
            FB.login( function(response) {
                      if (response.session) 
                      {
                        if (response.perms) 
                        {
                          // user is logged in and granted some permissions.
                          // perms is a comma separated list of granted permissions
                          alert( "With perm" );
                        } 
                        else 
                        {
                          // user is logged in, but did not grant any permissions
                          alert( "logged in" );
                        }
                      } 
                      else 
                      {
                        // user is not logged in
                        alert( "Not logged in" );
                      }
                    }, {perms:'read_stream,publish_stream,offline_access'});  // these are the permissions we ask for
            alert( "Ending loginUser()" );
        }


        function isLoggedIn()
        {
            alert("About to Run");
            FB.getLoginStatus( function(response) {

                alert( "Running isLoggedIn()" ); // ERROR HERE This line never executes in Internet Explorer
                alert( response.status ); 
                if ( response.status == "unknown" )
                {
                    setTimeout( "loginUser()", 1000 );
                }
                else if ( response.status == "notConnected" )
                {
                    // We dont have permissions but the user is logged in
                    setTimeout( "loginUser()", 1000 );  // ask for permsissions
                }
                else if ( response.status == "connected" )
                {
                    // User is logged in & has given my app permissions
                }
                else  { alert( "Weird case" ); }

            });
        }

    </script>
</head>
<body>
    <h1>IFRame Test</h1>
    <p><fb:login-button autologoutlink="true"></fb:login-button></p>
    <p><fb:like></fb:like></p>

    <div id="fb-root"></div>
    <script type="text/javascript">
      window.fbAsyncInit = function() {
        FB.init({appId: '172889292760575', status: true, cookie: true,
                 xfbml: true});
      };
      (function() {
        var e = document.createElement('script');
        e.type = 'text/javascript';
        e.src = document.location.protocol +
          '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
      }());
      alert( "CONNECTING" );
    </script>

    <div>
        <a href="javascript:isLoggedIn()">ABCD</p>
    </div>
    <script type="text/javascript">
        alert( "javascriptInner" );
        isLoggedIn();
    </script>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

不确定这是否有帮助,但请尝试使用:

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

之前

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

然后:

FB.init({
  appId  : '172889292760575',
  status : true,
  cookie : true,
  xfbml  : true 
});

而不是

  window.fbAsyncInit = function() {
    FB.init({appId: '172889292760575', status: true, cookie: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script');
    e.type = 'text/javascript';
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
  }());

因为在您尝试使用FB时可能未定义FB