6

次のコードがありますが、FB.login で FB is not defined javascript エラーが発生します。

私は何が欠けていますか?

<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>
4

3 に答える 3

8

window.fbAsyncInit に割り当てられた関数は、SDK が読み込まれるとすぐに実行されます。SDK のロード後に実行するコードは、この関数内で FB.init の呼び出しの後に配置する必要があります。たとえば、ここでユーザーのログイン状態をテストしたり、アプリケーションが関心のある Facebook イベントをサブスクライブしたりします。

初期化とログイン機能の間に他の初期化コードを入れてみてください

または、FB.login コードを $(document).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'});

});
于 2012-02-01T08:53:30.023 に答える
6

このために特別FB.loginに設計された JS-SDK がロードされる前にを呼び出すべきではありません。window.fbAsyncInitこの呼び出しをwindow.fbAsyncInit関数内に移動すれば問題ありませんが、呼び出すとポップアップが開くことに注意してください。FB.loginユーザーの操作なしでこれを行うと、ほとんどのブラウザーでブロックされる可能性があります。ログインの処理に使用する場合は、またはイベントFB.loginで行う必要があります...clicksumbit

ところで、fb:login-buttonユーザーがクリックすると、すでにログインを行っているものがあります。

于 2012-02-01T08:53:06.433 に答える