0

我使用新的Facebook登錄:的Facebook的OAuth登錄成功也不回原窗口,IE只

window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '@facebookAppId', // App ID 
      status: true, // check login status 
      cookie: true, // enable cookies to allow the server to access the session 
      xfbml: true, // parse XFBML 
      oauth: true 
     }); 
     runFbInitCriticalCode(); 
    }; 

    function runFbInitCriticalCode() { 
     // Additional initialization code here 
     FB.Event.subscribe('auth.login', function() { 
      window.location = "/facebookPostAuth.aspx"; 
     }); 

     FB.Event.subscribe('auth.logout', function (response) { 

     }); 

     // Hack to fix http://bugs.developers.facebook.net/show_bug.cgi?id=20168 for IE7/8/9 
     FB.UIServer.setLoadedNode = function (a, b) { FB.UIServer._loadedNodes[a.id] = b; }; 
    }; 

    // Load the SDK Asynchronously 
    (function (d) { 
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; } 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     d.getElementsByTagName('head')[0].appendChild(js); 
    } (document)); 

任何人都知道爲什麼彈出登錄成功,登錄彈出關閉,成功後的結果不返回到登錄頁面或發件人頁面?這隻發生在IE中。

回答

0

找到了FB.Event.subscribe('auth.login')不是100%可靠的IE,因爲它有時不會命中。

當我在IE中調試JavaScript時,它可以工作。當我沒有使用IE Developer工具進行調試時,它通常無法擊中。

我已經設置了一個JavaScript時間間隔作爲IE的保險來檢查接收到的FB令牌(這個工作完美,因爲即使登錄事件訂閱在IE中不工作時,我總是在成功登錄後獲取accesstoken) 。

仍...如果有人知道爲什麼這個問題,請隨時張貼。

UPDATE

而不是使用Facebook的按鈕,需要被初始化的,我已經設置了自定義的錨/按鈕明確地使用JavaScript單擊事件處理程序,它調用登錄功能。這解決了IE的特性,我不再需要一個時間間隔來檢查令牌何時收到。此外,我可以從一開始就設計它,而不是在原始的FB初始化登錄按鈕上進行造型。

http://developers.facebook.com/docs/reference/javascript/FB.login/

上的click事件,我呼籲:

FB.login(function(response) { 
    if (response.authResponse) { 
    //Token, Login Status can be grabbed from response.authResponse 
    } else { 
    console.log('User cancelled login or did not fully authorize.'); 
    } 
}, {scope: 'email'}); 
0

問題是與IE瀏覽器所需要的P3P頭做。

我們總是這樣做我們的項目添加此頭(這是MVC3 ASP.NET):

protected override void OnResultExecuting(ResultExecutingContext filterContext) 
     { 
      base.OnResultExecuting(filterContext); 
      // You need this to allow IE to have cross domain cookies and sessions 
      filterContext.HttpContext.Response.AddHeader("P3P:CP", "IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"); 
      filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", FacebookSettings.CurrentConfig().CanvasUrl); 
     } 

你可以在這裏找到更多的信息:

Iframe Facebook application and cookies [Internet Explorer]