2013-10-11 134 views
2

以下代码来自官方Facebook开发人员页面,适用于FF和Safari,有时适用于Chrome - 但更多情况下不适用于Chrome。Facebook JavaScript API - Chrome中的登录失败

在带有最新Chrome的Snow Leopard上,我点击登录按钮并在FB登录对话框打开和关闭时看到一点闪烁。如果在我的FB账户中,我删除并重新添加应用程序,我会被要求提供权限,但事件似乎从未触发。

有谁知道这是否是一个错误,或者我可能会找到一个解决方案,不需要我手动轮询服务器?

这是Google+还是Facebook的产品?

<html> 
<head></head> 
<body> 
<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
      appId  : $APP_ID$,     // App ID from the app dashboard 
      channelUrl : $channelUrl$,    // Channel file for x-domain comms 
      status  : true,      // Check Facebook Login status 
      cookie  : true, 
      oauth  : true, 
      xfbml  : true      // Look for social plugins on the page 
    }); 

    // Here we subscribe to the auth.authResponseChange JavaScript event. This event is fired 
    // for any authentication related change, such as login, logout or session refresh. This means that 
    // whenever someone who was previously logged out tries to log in again, the correct case below 
    // will be handled. 
    FB.Event.subscribe('auth.authResponseChange', function(response) { 
    console.log('auth.authResponseChange fired'); 
    // Here we specify what we do with the response anytime this event occurs. 
    if (response.status === 'connected') { 
     // The response object is returned with a status field that lets the app know the current 
     // login status of the person. In this case, we're handling the situation where they 
     // have logged in to the app. 
     testAPI(); 
    } else if (response.status === 'not_authorized') { 
     // In this case, the person is logged into Facebook, but not into the app, so we call 
     // FB.login() to prompt them to do so. 
     // In real-life usage, you wouldn't want to immediately prompt someone to login 
     // like this, for two reasons: 
     // (1) JavaScript created popup windows are blocked by most browsers unless they 
     // result from direct interaction from people using the app (such as a mouse click) 
     // (2) it is a bad experience to be continually prompted to login upon page load. 
     FB.login(); 
    } else { 
     // In this case, the person is not logged into Facebook, so we call the login() 
     // function to prompt them to do so. Note that at this stage there is no indication 
     // of whether they are logged into the app. If they aren't then they'll see the Login 
     // dialog right after they log in to Facebook. 
     // The same caveats as above apply to the FB.login() call here. 
     FB.login(); 
    } 
    }); 
    }; 

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

    // Here we run a very simple test of the Graph API after login is successful. 
    // This testAPI() function is only called in those cases. 
    function testAPI() { 
    console.log('Welcome! Fetching your information.... '); 
    FB.api('/me', function(response) { 
     console.log('Good to see you, ' + response.name + '.'); 
    }); 
    } 
</script> 

<!-- 
    Below we include the Login Button social plugin. This button uses the JavaScript SDK to 
    present a graphical Login button that triggers the FB.login() function when clicked. 

    Learn more about options for the login button plugin: 
    /docs/reference/plugins/login/ --> 

    <!-- scope='publish_stream,read_stream' --> 
<fb:login-button show-faces="true" width="200" max-rows="1"></fb:login-button> 
</body> 
</html> 
+0

Windows XP Chrome报告FB JS SDK代码中有关http/https协议不匹配的错误 - 将FB'连接'URI从'//'更改为'https '没有任何区别。 – LeeGee

回答

3

进入chrome设置 - 高级设置;在隐私下点击“内容设置”。查看是否选中“阻止第三方Cookie和网站数据”。

我有一个类似的问题,其中铬在js-sdk会给我瞬间fb弹出窗口,但实际上似乎没有登录用户或识别用户登录/授权。就我而言,我认为我已将问题缩小到了该设置。

如果您启用了该功能,请尝试禁用该功能以查看是否为您解决了这个问题......虽然这只是一个诊断步骤,但它不是解决方案,因为您仍然拥有启用该设置的用户。

我试图确定解决办法如有可能..涉及使用FB登录流程“为网页”(即不使用他们的SDK,从而有可能避免使用第三方Cookie的)

这里是我的这个问题的版本的帖子... can facebook javascript/php SDK's "talk" to each other if 3rd-party cookies are disabled? facebook->getUser() returns 0

+0

我的解决方法是使用onClick事件触发FB.login提供我自己的按钮。我怀疑如果所有东西都托管在hTTPS服务器上,这显然现在是FB的要求(截至10月1日),这一切都会好起来的。 – LeeGee