使用facebook api但得到fb未定义错误

时间:2015-08-22 18:30:15

标签: jquery asynchronous facebook-javascript-sdk

尝试在点击事件上发布到Facebook并获取FB未定义的错误。下面是代码。如何在FB方法之外使用Fb。我研究并发现FB是异步初始化的,这意味着它可以在文档准备好之前或之后加载。如何修复我的代码,以便我可以在需要时调用FB变量并将其初始化。

{{1}}

1 个答案:

答案 0 :(得分:0)

使用以下代码。如果在文档准备就绪时加载了facebook,则初始化FB;另一方面,设置加载facebook时使用的fbAsyncInit函数。如果愿意,可以将getLoginStatus调用包装在循环中。这个答案是使用以下来源Working with asynchronously loaded javascript

开发的
<!DOCTYPE HTML>
<html>
    <head>
        <title></title>
        <script src="jquery-1.11.1.min.js"></script>
    </head>
    <body>
        <input type="text" id="message" />
        <input type="button" id="send" value="Send" />
    <script>
        $(document).ready(function(){
            function facebookReady() {
                FB.init({
                    appId      : '1521775134725984',
                    xfbml      : true,
                    status   : true,
                    cookie     : true,
                    version    : 'v2.1'
                });
                $(document).trigger("facebook:ready");
            }

            if(window.FB) {
                facebookReady();
            } else {
                window.fbAsyncInit = facebookReady;
            }
        });

        $(document).on("facebook:ready", function() {

            $("#send").on("click", function() {
                FB.getLoginStatus(function(response) {
                    if (response.status === 'connected') {
                        var body = $("#message").val();
                        FB.api('/me/feed', 'post', { message: body }, function(response) {
                            if (!response || response.error) {
                                alert('Error occured');
                            } else {
                                alert('Post ID: ' + response.id);
                            }
                        });
                    }
                    else {
                        FB.login(function(){
                        }, {scope: 'publish_actions'});
                    }
                });
            });
        });

    (function(d, s, id){
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>
    </body>
</html>