我正在使用 facebook javascript SDK 在我的应用程序中集成 Facebook 登录。 我的应用程序中有 2 个 JS 文件。
- FacebookLogin.js
- 内容.js
现在我正在 content.js 中加载 FacebookLogin.js。 此外,我的 FacebookLogin.js 中有以下代码
var userID;
window.fbAsyncInit = function() {
//SDK loaded, initialize it
FB.init({
appId : 'MY_APP_ID',
xfbml : true,
version : 'v2.2'
});
//check user session and refresh it
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
//user is authorized
userID = response.authResponse.userID;
} else {
document.getElementById('status').innerHTML = 'Please log into Facebook.';
}
});
};
现在我想在我的 content.js
文件中使用该 userID
变量。
这样我就可以检查用户是否已经登录,如下所示
if(userID === undefined && userID === null)
{
showSocialLoginPopup();
return false;
}
这里 showSocialLoginPopup()
显示一个带有不同登录选项的弹出窗口,如 facebook、Twitter 等。现在,如果用户已经登录,那么我不想显示该弹出窗口。
最佳答案
这主要是一个关于范围的问题。
所有 .js 文件都将加载到同一个 DOM 中,因此可以跨文件访问变量和函数等。
一种选择是使 userID 成为全局变量:
1) 确保您的 content.js 在 FacebookLogin.js 之后加载
2) 在任何函数或对象之外声明变量 userID
这将允许您在 JavaScript 中的任何位置访问 userID
这是一个关于 javascript 中变量作用域的小教程:
http://www.w3schools.com/js/js_scope.asp
编辑: 另一个潜在的问题可能是时机。
FB.getLoginStatus() 是一个异步调用,需要一些时间才能完成,直到该调用完成后才会设置 userID。
如果 content.js 中的函数没有落后于某种事件或超时,那么它很可能在 FB 调用完成之前执行,这意味着 userID 仍然是未定义的。
关于javascript - 如何检查用户是否已经登录facebook?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29506225/