我在页面加载时在我的代码中使用Facebook登录方法,但是当我执行此代码时,弹出窗口阻止程序会关闭Facebook权限窗口。
如何使用Javascript
打开此窗口而无需在弹出窗口阻止程序中例外?
以下是我的代码:
FB.login(function(response)
{
if(response.session!=null)
{
window.location.href='http://example.com';
}
},
{ perms: 'email,user_birthday,publish_stream' });
答案 0 :(得分:20)
你可以做类似的事情 -
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 :(得分:15)
在文档中明确否定了这一点:
“你应该只在用户事件上调用它,因为它会打开一个弹出窗口。大多数浏览器阻止弹出窗口,除非它们是从用户事件启动的,例如点击按钮或链接。”
这也只是糟糕的用户体验。
答案 2 :(得分:6)
如果您可以只围绕它们进行编码,那么弹出窗口阻止程序就没有意义了。您需要找到一个不使用弹出窗口的方法,或者需要与浏览器进行某些用户交互才能打开弹出窗口。
答案 3 :(得分:6)
是的,您需要使用用户事件调用它,但严格来说是onclick
事件,而不是任何其他事件:
<a href="#" onclick="fbLogin()"> Login</a> <!-- works -->
<a href="#" onmousedown="fbLogin()"> Login</a> <!-- doesnt work -->
<a href="#" onmouseup="fbLogin()"> Login</a> <!-- doesnt work -->
答案 4 :(得分:5)
如果您尝试自动打开弹出窗口,那么弹出窗口阻止程序很可能会被激活,据我所知,它必须基于某些用户操作,例如单击按钮。尝试单击按钮执行此代码,它应该可以工作。