我正在使用facebook javascript SDK在我的应用中将登录与facebook集成。 我的应用程序中有2个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.';
}
});
};
现在我想在userID
文件中使用content.js
变量。
这样我就可以检查用户是否已经登录,如下所示
if(userID === undefined && userID === null)
{
showSocialLoginPopup();
return false;
}
这里showSocialLoginPopup()
显示一个弹出窗口,其中包含不同的登录选项,如Facebook,Twitter等。现在,如果用户已经登录,那么我不想显示该弹出窗口。
答案 0 :(得分:1)
这主要是关于范围的问题。
所有.js文件都将加载到同一个DOM中,因此可以跨文件访问变量和函数等。
一种选择是使userID成为全局变量:
1)确保在您的FacebookLogin.js之后加载了您的content.js
2)在任何函数或对象之外声明你的变量userID
这将允许您在javascript中的任何位置访问userID
以下是javascript中变量范围的小教程:
http://www.w3schools.com/js/js_scope.asp
编辑: 另一个潜在的问题可能是计时。
FB.getLoginStatus()是一个异步调用,需要一些时间才能完成,在调用结束后才会设置userID。
如果content.js中的函数不在某种事件或超时后面,那么它可能在FB调用完成之前执行,这意味着仍然会未定义userID。