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

Javascript FaceBook IFrame应用程序:getLoginStatus仅在Internet Explorer中失败,javascript,facebook,facebook-graph-api,Javascript,Facebook,Facebook Graph Api,我有一个非常简单的facebook IFrame应用程序,可以检查当前用户是否登录facebook。如果他们没有登录,我等待1秒钟,然后打开登录对话框提示他们登录。 当我在Firefox和Chrome上运行我的应用程序时,这一切都非常有效。但当我在Internet Explorer中运行它时,Javascript函数isLoggedIn()在我使用该行后失败/中断 FB.getLoginStatus( function(response) { 你认为为什么会发生这种情况&你知道我如何解决这个问

我有一个非常简单的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>

IFRame测试
函数loginUser()
{
警报(“正在运行loginUser()”;
FB.登录(功能(响应){
if(response.session)
{
if(response.perms)
{
//用户已登录并被授予某些权限。
//perms是以逗号分隔的已授予权限列表
警惕(“烫发”);
} 
其他的
{
//用户已登录,但未授予任何权限
警报(“登录”);
}
} 
其他的
{
//用户未登录
警报(“未登录”);
}
},{perms:'read_stream,publish_stream,offline_access'})//这些是我们要求的权限
警报(“结束登录用户()”;
}
函数isLoggedIn()
{
警报(“即将运行”);
FB.getLoginStatus(函数(响应){
警报(“正在运行isLoggedIn()”;//此处出错此行从未在Internet Explorer中执行
警报(响应状态);
如果(response.status==“未知”)
{
setTimeout(“loginUser()”,1000);
}
else if(response.status==“notConnected”)
{
//我们没有权限,但用户已登录
setTimeout(“loginUser()”,1000);//请求权限
}
else if(response.status==“已连接”)
{
//用户已登录并已授予我的应用权限
}
否则{alert(“怪异的情况”);}
});
}
IFRame测试

window.fbAsyninit=函数(){ FB.init({appId:'172889292760575',状态:true,cookie:true, xfbml:true}); }; (功能(){ var e=document.createElement('script'); e、 类型='text/javascript'; e、 src=document.location.protocol+ “//connect.facebook.net/en_US/all.js”; e、 异步=真; document.getElementById('fb-root').appendChild(e); }()); 警报(“连接”); ABCD

警报(“javascriptInner”); isLoggedIn();
不确定这是否有帮助,但请尝试使用:

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

  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时,它可能尚未定义,所以不确定这是否有帮助,但请尝试使用:

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

  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在您尝试使用它时可能尚未定义