5

我有以下代碼但FB.login給出了FB未定義的javascript錯誤。FB未在Facebook中定義登錄

我錯過了什麼?

<html> 
<body> 
<div id="fb-root"></div> 
<script> 
window.fbAsyncInit = function() 
{ 
FB.init 
({ 
    appId : 'XXXX', 
    status : true, 
    cookie : true, 
    xfbml : true 
}); 
}; 

(function() 
{ 
var e = document.createElement('script'); 
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
e.async = true; 
document.getElementById('fb-root').appendChild(e); 
}()); 



FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 


</script> 
hello 
<fb:login-button></fb:login> 

</body> 
</html> 

回答

7

分配給window.fbAsyncInit的函數在SDK加載後立即運行。任何你想在SDK加載後運行的代碼都應該放在這個函數中,並且在調用FB.init之後。例如,您可以在這裏測試用戶的登錄狀態或訂閱您的應用程序感興趣的任何Facebook事件。

試圖通過保持其他初始化代碼在inialization和登錄功能之間

或者保持的FB.login代碼$(文件)。就緒

$(document).ready(function(){ 

FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 

}); 
5

加載JS-SDK之前,您應該不打電話FB.loginwindow.fbAsyncInit特別爲此設計。如果您將此呼叫轉移到window.fbAsyncInit函數內,您會很好,但請注意事實上撥打FB.login會打開彈出窗口,在沒有用戶交互的情況下執行此操作可能會被大多數瀏覽器阻止。如果你想使用FB.login來處理登錄,你都必須做的clicksumbit事件......

順便說一句,你已經有fb:login-button一旦用戶點擊它這是做登錄。

1

,如果你嘗試你也可以得到這個錯誤在您的機器上啓動facebook example code(例如,複製.html文件中的代碼並嘗試在瀏覽器中打開它)。您需要將其上傳到您的服務器並從那裏運行。