2012-07-22 66 views
1

使用JavaScript登錄Facebook使用FB.getLoginStatus在一種情況下工作,在另一種情況下不起作用。Facebook與JavaScript集成RoR不起作用

這工作:

//view 
<script type="text/javascript"> 
function f1() { 
FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
    // the user is logged in and has authenticated your 
    // app, and response.authResponse supplies 
    // the user's ID, a valid access token, a signed 
    // request, and the time the access token 
    // and signed request each expire 
    FB.api('/me', function(response) { 
     alert(response.name + " " + response.id); 
     name1 = response.name; 
     uid1 = response.id; 
    }); 
    // var uid = response.authResponse.userID; 
    // var accessToken = response.authResponse.accessToken; 
    } else if (response.status === 'not_authorized') { 
    // the user is logged in to Facebook, 
    // but has not authenticated your app 
    } else { 
    // the user isn't logged in to Facebook. 
    } 
}); 
} 
</script> 

<%= content_for :body_attributes, "onload='f1();'" %> 

這不起作用

// view 
<script type="text/javascript"> 
function f1() { 
    // same definition as above 
    } 
</script> 

<script type="text/javascript"> { 
f1() 
    } 
</script> 

我不明白,爲什麼第二個代碼不起作用。謝謝!

回答

0
<script type="text/javascript"> 
{ 
    f1() 
} 
</script> 

刪除括號並添加一個分號,你應該確定:

<script type="text/javascript"> 
    f1(); 
</script> 
+0

謝謝李。它仍然不起作用 – user1388066 2012-07-22 01:39:39

+0

好的。當你說它不起作用時,你是什麼意思?你有錯誤嗎?你看了控制檯嗎? – 2012-07-22 01:41:37

+0

alert()語句不顯示變量:name1和uid1 – user1388066 2012-07-22 02:32:40

0

這工作:

//view 
<script type="text/javascript"> 
function f1 { 
FB.getLoginStatus(function(response) { 

很難相信,這應該工作 - 因爲這是而不是你如何在JavaScript中定義一個函數。它缺少函數名稱後面的圓括號()。

[來自評論] FB.api是不是必須被事件觸發?

不,它不 - 它可以從任何地方調用。

只需要(/可能會)創建一個彈出窗口(FB.login,FB.ui)的方法,通常最好是在用戶交互(如點擊)上調用它們,因爲否則現代瀏覽器的彈出窗口阻止程序將使用默認設置可能會壓制彈出窗口。

+0

謝謝@CBroe的幫助。函數定義是上述代碼中的錯字,但不是我的工作版本。對不起。我做了編輯。FB.api調用在第二種情況下不起作用。我似乎記得在某個地方閱讀它必須被觸發。再次感謝! – user1388066 2012-07-22 13:00:22

+0

重讀您的評論@CBroe,您是否在說彈出窗口攔截器可能會負責案件2的行爲?即使彈出窗口不涉及。謝謝! – user1388066 2012-07-22 13:25:04

+0

未來請小心處理您的問題描述,因爲它有助於避免我們剛剛做的事情發生偏離。也就是說,JS SDK甚至可以在第二種情況下正確加載和初始化,在那個地方你可以調用你的函數...? – CBroe 2012-07-22 14:01:50