0

在我的网站上,我检查当前用户是否已经喜欢它的粉丝页面。如果没有,我会显示一个粉红色箭头作为提示。

打开页面并等待加载所有内容时,这似乎可以正常工作。但是,如果我只是输入地址,按回车并立即切换到另一个浏览器选项卡,我可以稍后再回来找到粉红色箭头,即使我已经喜欢粉丝页面。

检测方法如下(调用$(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);
        }
    });
}

FB在隐藏选项卡中运行时,api(即对象)是否可能表现不同?我不敢相信,但我不知道还有什么可能是原因......

该问题出现在http://lolkitten.org/上,可以使用最新的 chrome 进行复制。

4

2 回答 2

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);
        }
    });
}); 
于 2013-03-31T01:21:37.757 回答
0

这与浏览器视图端口中可见哪个选项卡无关,您应该将函数showLikeHint放在 a$(window).load中,我会做什么,$(document).ready()在加载 HTML 文档并且 DOM 准备好$(window).load时调用,当完整页面完全加载时调用,包括所有框架、对象和图像,希望对您有所帮助。

于 2013-03-10T14:25:30.080 回答