检测到Javascript文件未加载(Facebook的JS文件)

时间:2014-03-07 16:38:58

标签: javascript facebook-graph-api

当用户访问我们的网站时,如果他们已登录我们的Facebook应用,我们希望向他们展示应用showFacebook()的“已登录”视图。否则,我们希望显示一个登录应用程序的选项,或使用本地帐户showLogin()登录我们的网站。

window.fbAsyncInit = function() {
            FB.init({
                appId      : <cfif cgi.SERVER_NAME CONTAINS "dev">'460582120708297'<cfelse>'1422691834609812'</cfif>,
                status     : true, // check login status
                cookie     : true, // enable cookies to allow the server to access the session
                xfbml      : true  // parse XFBML
            });

            FB.Event.subscribe('auth.authResponseChange', function(response) {
                // Handle the results of logging in 
                if (response.status === 'connected') {
                    showFacebook();
                }
                else {
                    showLogin();
                }
            });

            // Check if the user is already logged into the Facebook app
            FB.getLoginStatus(function(response) {
                if (response.status === 'connected') {
                    showFacebook();
                } else {
                    showLogin();
                }
            });
        };

        // Load the SDK asynchronously
        (function(d){
            var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
            if (d.getElementById(id)) {return;}
            js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/en_US/all.js";
            ref.parentNode.insertBefore(js, ref);
        }(document));

这在大多数情况下都很有效。但是,有时,showFacebook()showLogin()都没有被解雇。我的猜测是,这些是在工作或在学校的用户,他们的网络管理员已经阻止了Facebook。

如何检测到Facebook JS文件(http://connect.facebook.net/en_US/all.js)未加载?

2 个答案:

答案 0 :(得分:1)

检查是否定义了window.FB。如果没有,则库未加载。

if (window.FB) {
    // go for it
}

答案 1 :(得分:0)

我选择了Doge的回应:

$(document).ready(function(e) {

            // Show the login without the Facebook button if Facebook doesn't load in 5 seconds
            setTimeout(function(){
                if(!window.FB){
                    $("#facebook_login_area").hide();
                    showLogin();
                }   
            },5000);
});

我从Facebook上拨打异步电话5秒钟加载。如果它在那段时间没有加载,我显示我的showLogin(),但没有登录Facebook应用程序的选项。