首页 > 解决方案 > Facebook SDK 未初始化

问题描述

我正在尝试在我的网站上启用 javascript facebook 登录,但我不断收到一个 javascript 错误,提示未定义 FB。我完全按照 facebook 上的开发指南进行操作,但我不相信 fbasyncinit 确实有效。

https://developers.facebook.com/docs/javascript/quickstart

我的初始化代码是直接在我的布局页面中打开之后。

    <script>
        window.fbAsyncInit = function ()
        {
            FB.init(
            {
                appId            : 'xxxxxxxxx',
                autoLogAppEvents : true,
                xfbml            : true,
                version          : 'v3.0'
            });

            $(document).ready(function ()
            {
                $(document.body).on('click', '#facebook-login', function ()
                {
                    FB.getLoginStatus(function (response)
                    {
                        alert(response);
                    });
                });
            });
        };

        (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 = "https://connect.facebook.net/en_US/sdk.js";
             fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
    </script>

当我点击我的#facebook-login 按钮时,它会点击 FB.getLoginStatus() 但总是抛出“JavaScript 运行时错误:'FB' 未定义”。我正在本地机器上调试,但我尝试将此代码推送到具有外部 IP 的开发机器,我已将我的 fbook 开发人员应用程序 url 更改为该 url,但它仍然无法正常工作。

我发现的所有谷歌结果都是多年前的,根本没有帮助。

** 更新 1 ** 我尝试将此 ajax 调用放入我的 document.ready 中,但它总是失败。那么问题可能出在用于检索 SDK 的 url 上?我尝试了带有和不带有“https:”的网址

$.ajax(
{
    url: '//connect.facebook.net/en_US/sdk.js',
    dataType: 'script',
    cache: true,
    success:function(script, textStatus, jqXHR)
    {
        FB.init(
        {
            appId      : 'xxxxxxxxxx',
            xfbml      : true,
            version    : 'v3.0'
        });

        FB.getLoginStatus(updateStatusCallback);
    },
    error:function(){ alert("Failed")}
});

标签: javascriptfacebook

解决方案


javascript SDK 被我工作网络上的代理阻止。我能够从我的手机(不在网络上)登录。但是当我将 sdk 的 url 放在浏览器中时,我通过查看网络流量发现了这一点。


推荐阅读