gpt4 book ai didi

javascript - 防止阻止使用 Facebook SDK 出现的弹出窗口

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:41 28 4
gpt4 key购买 nike

A 无法阻止 Facebook JS SDK 显示的弹出窗口。看了文档,明白了JS SDK的调用一定是在用户点击之后。此代码工作正常,浏览器不会阻止弹出窗口:

function Login() {
FB.login(function (response) {
if (response.authResponse) {
DoSmth(response.authResponse.accessToken);
}
}, { scope:'user_birthday, publish_stream' });
}

但是如果我将在任何地方使用此代码(例如,发布到墙上,获取用户数据),弹出窗口将在所有情况下显示,即使用户已经登录 facebook。我想,这样不行。

要确定该用户已经登录,我使用以下代码:

function CheckOrLogin() {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
DoSmth(response.authResponse.accessToken);
}
else {
FB.login(function (response) {
if (response.authResponse) {
DoSmth(response.authResponse.accessToken);
}
}, { scope:'user_birthday, publish_stream' });
}
}, true);
}

在这种情况下,如果用户已经登录,则不会显示弹出窗口。但如果用户尚未登录 facebook,则此条件(if (response.status ===) 返回 false。浏览器将 BLOCK popup, FB.login 会显示出来,请问有什么办法可以避免吗?

最佳答案

尝试在页面加载时立即检查登录状态,并将结果和 accessToken 存储在某个变量中。

var userData = {isConnected: false, token: null};
FB.getLoginStatus(function (response) {
userData.isConnected = (response.status === 'connected');
if (userData.isConnected) {
userData.token = response.authResponse.accessToken;
}
}, true);

当用户点击某个按钮时——只需检查变量的值。

function CheckOrLogin() {
if (userData.isConnected) {
DoSmth(userData.token);
} else {
FB.login(function (response) {
if (response.authResponse) {
DoSmth(response.authResponse.accessToken);
}
}, { scope:'user_birthday, publish_stream' });
}
}

关于javascript - 防止阻止使用 Facebook SDK 出现的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841936/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com