当用户访问我们的网站时,如果他们已登录我们的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)未加载?
答案 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应用程序的选项。