在我的网站上,我检查当前用户是否已经喜欢其粉丝页面。如果没有,我会显示一个粉红色箭头作为提示。
这在打开页面并等待加载所有内容时似乎正常工作。但是,如果我只输入地址,按回车并立即切换到另一个浏览器标签,我可以稍后再回来查找粉红色箭头,即使我已经喜欢粉丝页面。
检测方法如下(在$(document).ready()
上调用):
function showLikeHint() {
if (typeof FB === 'undefined') {
setTimeout(showLikeHint, 100);
return;
}
FB.api('/me/likes/339255156110755', {limit: 1}, function(r) {
try {
if (FB.getUserID() != "" && r.data.length == 1)
iLikeFanpage();
else
iDontLikeFanpage();
} catch (e) {
setTimeout(showLikeHint, 200);
}
});
}
在隐藏选项卡中运行时,api(即FB
对象)是否可能表现不同?我无法相信,但我不知道还有什么原因......
问题出现在http://lolkitten.org/上,可以使用最新的Chrome进行复制。
答案 0 :(得分:0)
在brwoser视口中看到哪个选项卡无关紧要,你应该将函数showLikeHint
放在$(window).load
内,这就是我要做的事情,$(document).ready()
在被调用时被调用加载HTML文档并准备好DOM,在完整加载完整页面时调用$(window).load
,包括所有框架,对象和图像,希望这对您有所帮助。
答案 1 :(得分:0)
我发现了问题。如果用户尚未通过身份验证,则r.data
将为undefined
。我的解决方案如下:
FB.getLoginStatus(function (loginResponse) {
if (loginResponse.status !== 'connected') {
iDontLikeFanpage();
return;
}
FB.api('/me/likes/339255156110755', {limit: 1}, function(r) {
try {
var likeData = r.data;
if (typeof likeData === 'undefined') {
setTimeout(showLikeHint, 200);
return;
}
if (FB.getUserID() != "" && likeData.length == 1)
iLikeFanpage();
else
iDontLikeFanpage();
} catch (e) {
setTimeout(showLikeHint, 200);
}
});
});