我正在尝试创建一个简单的Facebook应用程序,但是对于授权,它似乎总是被弹出窗口阻止程序阻止。因此我的代码是:
FB.init({
appId : THEAPPPIDDDD,
status : true,
cookie : true,
xfbml : true,
});
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', function(response) {
FB.logout(function(response) {
console.log('Logged out.');
});
});
} else {
console.log('User did not authorize.');
}
});
非常感谢任何帮助......谢谢
答案 0 :(得分:29)
我知道这个问题可能是another question: Stop the facebook popup blocker的重复我将此重新发布给Dave Zhang。我已经为我的一个网站修改了这段代码。在以下代码中,替换YOUR_APP_ID和您的网站网址,然后Facebook登录将无弹出窗口。
//Javascript
var uri = encodeURI('http://example.com');
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
window.location.href=uri;
} else {
window.location = encodeURI("https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri="+uri+"&response_type=token");
}
});
这只是直接重定向而不是打开弹出窗口。
答案 1 :(得分:3)
您应该点击某个按钮启动您的登录代码。作为处理FB时的一个好习惯,登录过程应始终由用户启动。
点击按钮调用您的代码,它应该解决您的问题。
答案 2 :(得分:1)
为避免通过弹出窗口进行登录,您应该在服务器端启动身份验证
答案 3 :(得分:1)
针对这个老问题的小更新,我发现它非常有用,我一直在收到错误消息,该错误不允许该域并且允许该域:
无法加载URL:此URL的域不包含在应用程序的域中。为了能够加载此URL,请将应用程序的所有域和子域添加到应用程序设置的“应用程序域”字段中。
因此,经过一番研究后,我发现您必须更改您的facebook应用设置以允许此类导航:
答案 4 :(得分:0)
如果Popup操作不是源于用户引起的事件,则弹出窗口阻止程序将始终启动。例如,如果您尝试在加载事件上执行弹出,则浏览器很可能会使用弹出窗口阻止程序。另一方面,如果您在click事件或keydown事件上触发弹出窗口,则不太可能触发弹出窗口阻止程序。
您还可以使用一种方法让您的应用程序检测弹出窗口是否被阻止。您可以阅读有关here的更多信息。
正如其他答案中所提到的,如果您更愿意在没有弹出窗口的情况下执行身份验证过程,则需要使用OAuth在服务器端处理此问题。