加载页面时,FB.login弹出窗口被阻止
FB.login pop up is blocked when page on load
页面加载时调用FB.login时遇到问题,FB.login弹出窗口被浏览器阻止。目前我知道我必须在用户点击事件后调用FB.login,但由于客户端的业务逻辑,我不得不这样做。
FB.api('/me/permissions', function(response2) {
var permsArray = response2.data[0];
var permsNeeded = ["user_events"];
var permsToPrompt = [];
for (var i in permsNeeded) {
if (permsArray[permsNeeded[i]] == null) {
permsToPrompt.push(permsNeeded[i]);
}
}
if (permsToPrompt.length > 0) {
promptForPerms(permsToPrompt);
}
});
var promptForPerms = function(perms) {
FB.login(function(response) {
}, {scope: perms.join(',')});
};
有没有任何解决方案可以在没有用户点击事件的情况下调用FB.login()?或者对此有什么调整吗?感谢您的帮助。
不幸的是,您将无法通过代码绕过弹出窗口阻止程序。
解决此问题的方法是在页面加载时将用户重定向到Facebook权限对话框,如手动构建登录流的文档中所述。
您首先需要检测用户是否已经通过身份验证/连接到您的应用程序,并且仅在未连接时重定向。这最好在window.fbAsyncInit
函数中完成,如下所示:
window.fbAsyncInit = function() {
var myAppID = 'YOUR APPLICATION ID';
FB.init({ appId: myAppID });
FB.getLoginStatus(function(response) {
if ('connected' != response.status) {
window.location.href = 'https://www.facebook.com/dialog/oauth' +
'?client_id=' + myAppID +
'&scope=user_events' +
'&redirect_uri=' + encodeURIComponent(document.URL);
} else {
alert('welcome to my app');
}
});
};
另一种选择是稍微调整您的用户旅程;也许如果用户没有连接,那么你可以显示一个覆盖层,其中包含一条消息,要求他们进行身份验证,以及一个按钮,点击后会调用FB.login.
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- Javascript排序的图像弹出窗口..可以't单独弹出
- 窗口大小html css
- 弹出窗口出现,然后退出
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- Javascript更新孙窗口中的表单元素
- 如何在选项卡上定义属性'的主窗口对象
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 召回窗口加载事件 - javascript
- 为什么不显示警报窗口
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- Chrome应用程序调整窗口大小保持纵横比
- FB.login有效,但弹出窗口不起作用;t关闭
- IE FB.login回调未运行,XD代理窗口保持打开状态
- Facebook FB.login()弹出窗口获胜't在IE8中关闭
- 加载页面时,FB.login弹出窗口被阻止
- FB.login弹出窗口不再适用于Safari mac