javascript - Facebook JS SDK 语法无法识别

标签 javascript facebook

我不知道为什么它找不到我为 JS 加载的库:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <link href="Content/Styles/Site.css" rel="stylesheet" type="text/css" />
        <title></title>
        <script src="Content/js/jquery-1.3.2.min.js" type="text/javascript"></script>
        <script src="Content/js/jquery.cookie.js" type="text/javascript"></script>
        <script src="Content/js/FacebookAPI.js" type="text/javascript"></script>
    </head>
    <body>


        <form id="form1" runat="server">
            <div id="facebookPhotos-iFrameContent">
                <div>
                    <p>Log into facebook by clicking on the button below</p>
                    <p id="facebook-LoginButtonContainer">

                    <input type="image" id="btnFacebookLogin" src="images/facebookLoginBtn.jpg" />

                    </p>
                    <p><asp:DropDownList ID="facebookAlbumDropdown" runat="server" /></p>
                    <div id="facebookPhotosContainer" />
                </div>
            </div>

            <div id="fb-root"></div>

        </form>


        <script type="text/javascript">

            var facebookApplicationID = '13xxxxxxxxxxxxx'; // edited out for this forum thread


            window.fbAsyncInit = function() 
            {
                FB.init({ appId: facebookApplicationID, status: true, cookie: true, xfbml: false });

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


        </script>
        <script type="text/javascript">


            var photosContainerDivID = 'facebookPhotosContainer';
            var loginButtonID = 'btnFacebookLogin';
            var dCookieValues = null;
            var accessToken = null;
            var userID = null;


            // WIRE UP EVENTS //
            $('#' + loginButtonID).click(function () 
            {
                alert("inside $('#' + loginButtonID).click(");
                LoginToFacebook();
            });

...

当我加载页面时,出现以下错误:

FB is not defined
[Break on this error] FB.getLoginStatus(function (response)
FacebookAPI.js (line 195)

我已在“这是什么回调?”中加载了 Facebook JS SDK?

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

不确定我在这里缺少什么。

更新:

        var facebookApplicationID = 'xxxxxxxxxxxxxxxx;


        window.fbAsyncInit = function () {
            alert("got here");
            // Initialize/load the JS SDK
            // cookie is set to true to activate JS SDK cookie creation & management
            FB.init({ appId: facebookApplicationID, status: true, cookie: true, xfbml: false });

            // now that the Facebook JS SDK is Initialized, continue with core logic
            FacebookJsSdkInitializedCallback();

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


    </script>

    <form id="form1" runat="server">
        <div id="facebookPhotos-iFrameContent">
            <div>
                <p>Log into facebook by clicking on the button below</p>
                <p id="facebook-LoginButtonContainer">

                <%--<asp:ImageButton ID="btnFacebookLogin" runat="server" ImageUrl="images/facebookLoginBtn.jpg" />--%>
                <input type="image" id="btnFacebookLogin" src="images/facebookLoginBtn.jpg" />

                </p>
                <p><asp:DropDownList ID="facebookAlbumDropdown" runat="server" /></p>
                <div id="facebookPhotosContainer" />
            </div>
        </div>

        <div id="fb-root"></div>

    </form>

    <script type="text/javascript">

        var photosContainerDivID = 'facebookPhotosContainer';
        var loginButtonID = 'btnFacebookLogin';
        var dCookieValues = null;
        var accessToken = null;
        var userID = null;

        function FacebookJsSdkInitializedCallback()
        {
            // bind the login button
            $('#' + loginButtonID).click(function () {
                alert("inside $('#' + loginButtonID).click(");
                LoginToFacebook();
            });

        }

我现在收到这些错误,但我仍然不知道为什么。显然我现在添加了一个回调,所以我知道初始化已经完成。但我认为将库加载到页面的代码失败了:

$("fb-root").appendChild is not a function
[Break on this error] $('fb-root').appendChild(e);

所以这是可能的,因为 jQuery 库尚未加载,但此异步方法在加载之前运行。所以不确定如何处理这个问题。您可以在顶部看到我的 jQuery 包含内容。

最佳答案

由于您对 FB API 使用异步加载方法,因此当您稍后调用它时,它不会被加载。您有两个选择:

1)切换为同步加载方式(参见first example on this page)

2) 添加一些回调到window.fbAsyncInit()函数,以便您知道 API 何时加载并可供使用:

window.fbAsyncInit = function () {
    FB.init({ appId: facebookApplicationID, status: true, cookie: true, xfbml: false});
    fbInitializedCallback();
}

function fbInitializedCallback()  {
    // WIRE UP EVENTS //
    ....
    LoginToFacebook();
}  

顺便说一句,如果您选择保留异步方法,您应该在打开 <body> 后立即放置该代码标记,它不会减慢您的页面加载速度。

关于javascript - Facebook JS SDK 语法无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3322516/

相关文章:

javascript - 迭代数值并作为 Prop 发送

javascript - 日期代码在 JS 中不起作用

android - 从 Android 应用程序向 Facebook 好友发送消息

javascript - 如何将字母数字检查添加到 jQuery 验证插件?

javascript - 鼠标滚轮在 swf 中不起作用(浏览器 chrome)

javascript - 无法使javascript正确运行

android - 重新询问 Facebook 中拒绝的权限不起作用

android - (Android)(Facebook) 多个 ProfilePictureViews 导致 OutOfMemoryError

ios - FBSDKLog : starting with Graph API v2. 4、对/me/permissions的GET请求应包含显式的 "fields"参数

iOS Facebook SDK 获取头像