Javascript 异步facebook函数
当javascript函数完成时,我似乎对正确的顺序有一些问题。 我有一个页面可以检查用户是否登录到facebook。如果有人登录,它将注销该人,并重定向到包含like按钮的其他页面。 但是,当我在没有重定向的情况下运行网页时,用户会正确注销。如果重定向已就位,则不再强制注销 您可以在此网站上测试代码:Javascript 异步facebook函数,javascript,asynchronous,facebook-like,facebook-javascript-sdk,Javascript,Asynchronous,Facebook Like,Facebook Javascript Sdk,当javascript函数完成时,我似乎对正确的顺序有一些问题。 我有一个页面可以检查用户是否登录到facebook。如果有人登录,它将注销该人,并重定向到包含like按钮的其他页面。 但是,当我在没有重定向的情况下运行网页时,用户会正确注销。如果重定向已就位,则不再强制注销 您可以在此网站上测试代码: var loggedout=false; window.fbAsyninit=函数(){ FB.init({ appId:'xxxxxxxxxxxx',//应用程序ID channelUrl:
var loggedout=false;
window.fbAsyninit=函数(){
FB.init({
appId:'xxxxxxxxxxxx',//应用程序ID
channelUrl:“”,//通道文件
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
fbApiInit=true;
};
(职能(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/nl_nl/all.js#xfbml=1&appId=511896318825154”;
ref.parentNode.insertBefore(js,ref);
}(文件);
函数fbEnsureInit(回调)
{
如果(!window.fbApiInit){
setTimeout(函数(){fbEnsureInit(回调);},50);
}否则{
如果(回调){
回调();
}
}
}
函数fbEnsureLogout(回调)
{
如果(!window.loggedout){
setTimeout(函数(){fbEnsureLogout(回调);},50);
}否则{
如果(回调){
回调();
}
}
}
fbEnsureInit(函数()
{
log(“这将在FB初始化后运行”);
检查注销();
});
fbEnsureLogout(函数()
{
log(“如果确保注销,将运行此命令”);
window.location=”http://quiet-depths-9481.herokuapp.com/like.php"
文件。写(“”);
});
函数checkLogout()
{
console.log('checkLogout');
FB.getLoginStatus(函数(响应)
{
如果(response.status===“已连接”)
{
var uid=response.authResponse.userID;
var accessToken=response.authResponse.accessToken;
console.log(“登录并验证”);
log('正在尝试立即注销');
FB.注销(功能(响应)
{
console.log('LOGGED OUT!');
loggedout=true;
});
}
else if(response.status===“未授权”)
{
log('已登录但未进行身份验证');
log('正在尝试立即注销');
FB.注销(功能(响应)
{
console.log('LOGGED OUT!');
loggedout=true;
});
}
其他的
{
log('未登录到facebook!');
loggedout=true;
}
});
}
我相信,如果没有facebook用户使用你的应用程序进行身份验证,你就不能注销他们。你可以在控制台中直接阅读,facebook的all.js返回
FB.logout() called without an access token.
这意味着您必须调用它们的api(FB.login或FB.getLoginStatus)。无论哪种方式,如果您的应用程序/站点没有适当的用户授权,您都无法获得访问令牌
你必须让用户使用你的应用程序登录,然后注销。这可能对你有用,因为你是应用程序的所有者,所以基本上你是通过应用程序连接的。谢谢你的回答,因为我无法强迫用户注销,所以我尝试了更微妙的方式。谢谢
function fbEnsureInit(callback)
{
if(!window.fbApiInit) {
setTimeout(function() {fbEnsureInit(callback);}, 50);
} else {
if(callback) {
callback();
}
}
}
function fbEnsureLogout(callback)
{
if(!window.loggedout) {
setTimeout(function() {fbEnsureLogout(callback);}, 50);
} else {
if(callback) {
callback();
}
}
}
fbEnsureInit(function()
{
console.log("this will be run once FB is initialized");
checkLogout();
});
fbEnsureLogout(function()
{
console.log("this will run if logout is ensured");
window.location = "http://quiet-depths-9481.herokuapp.com/like.php"
document.write('<div class="fb-like" data-href="https://www.facebook.com/accentjobs" data-width="450" data-show-faces="true" data-stream="true" data-header="true"></div>');
});
function checkLogout()
{
console.log('checkLogout');
FB.getLoginStatus(function(response)
{
if (response.status === 'connected')
{
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
console.log('logged in & authenticated');
console.log('trying to logout now.');
FB.logout(function(response)
{
console.log('LOGGED OUT!');
loggedout = true;
});
}
else if (response.status === 'not_authorized')
{
console.log('logged in but no authentication');
console.log('trying to logout now.');
FB.logout(function(response)
{
console.log('LOGGED OUT!');
loggedout = true;
});
}
else
{
console.log('Not logged in to facebook!');
loggedout = true;
}
});
}
</script>
FB.logout() called without an access token.