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コードを保つことにより、

てみてください(ドキュメント).ready

$(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.loginに、このために特に設計されたwindow.fbAsyncInitを呼び出すべきではありません。この電話機をwindow.fbAsyncInitの中に移動すると、うまくいくかもしれませんが、FB.loginに電話するとポップアップが開き、ユーザの介入なしにこれを行うとほとんどのブラウザでブロックされる可能性があることに注意してください。あなたはログインを処理するためにFB.loginを使用する場合は、あなたがclicksumbitイベントでそれを行う必要があります...

ところで、あなたはすでに、ユーザーがそれをクリックすると、ログインを行っているfb:login-buttonを持っています。

1

あなたがしようとした場合にも、このエラーを取得することができますあなたのマシンにfacebook example codeを起動してください(例えば、.htmlファイルのコードをコピーしてブラウザで開くなど)。これをサーバーにアップロードし、そこから実行する必要があります。

関連する問題