Facebook 映像请求阻止FB.getLoginStatus

Facebook 映像请求阻止FB.getLoginStatus,facebook,facebook-javascript-sdk,Facebook,Facebook Javascript Sdk,Facebook的Javascript SDK有一个名为getLoginStatus的方法,该方法会暂停(并且从不触发传入其中的回调),而页面上的图像请求也会暂停(即浏览器在很长一段时间内不会收到200或404) 如果您等待了很长时间,浏览器(?)最终关闭了获取图像的尝试,SDK将继续它的快乐之路 可能发生了什么,有没有办法预防?如果用户仅仅因为图像请求而无法登录或注册,这将非常不方便。您是否有adblockers设置?我在使用不同的API时遇到了类似的问题,Adblock Pro导致了一些问题

Facebook的Javascript SDK有一个名为
getLoginStatus
的方法,该方法会暂停(并且从不触发传入其中的回调),而页面上的图像请求也会暂停(即浏览器在很长一段时间内不会收到200或404)

如果您等待了很长时间,浏览器(?)最终关闭了获取图像的尝试,SDK将继续它的快乐之路


可能发生了什么,有没有办法预防?如果用户仅仅因为图像请求而无法登录或注册,这将非常不方便。

您是否有adblockers设置?我在使用不同的API时遇到了类似的问题,Adblock Pro导致了一些问题。

阻塞(HTML):


非阻塞(使用CSS):

#someDiv{
背景图片:url(…)不重复;
宽度:xxx;
身高:xxx;
}
非阻塞(使用JS):

var img=newimage();
img.onload=函数(){
document.getElementById('someDiv').appendChild(img);
};
img.src=“…”;
尝试解决方案2或3-还有许多用于JavaScripts的预加载插件,使您更容易异步加载大量图像,例如:


另一种解决方案是先加载较小的图像,然后异步加载hires图像。

当您使用Facebook SDK网站上的初始化代码时,默认情况下,它希望等待页面完全加载,以便运行某些事件,如FBAsyncint函数

我不确定是否有一种“官方支持的”方法可以绕过这个问题,但您可以自己加载Javascript源代码并直接调用例程(即,不在异步包装器中)

这是一个赤裸裸的示例,就像您提到的使用Facebook SDK初始化过程时遇到的问题一样,但它可以很好地解决此问题

<html>
<head>
    <title>This is a test</title>
    <script src="http://connect.facebook.net/fr_FR/sdk.js"></script>
    <script language="javascript">
    <!--
    var loggedIn = false;
    var authenticated = false;

    FB.init({
        appId      : '{your app ID here}',
        xfbml      : true,
        version    : 'v2.0'
    });

    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            // the user is logged in and has authenticated your
            // app, and response.authResponse supplies
            // the user's ID, a valid access token, a signed
            // request, and the time the access token 
            // and signed request each expire
            var uid = response.authResponse.userID;
            var accessToken = response.authResponse.accessToken;
            loggedIn = true;
            authenticated = true;
        } else if (response.status === 'not_authorized') {
            // the user is logged in to Facebook, 
            // but has not authenticated your app
            loggedIn = true;
        } else {
            // the user isn't logged in to Facebook.
        }
    });

    function testLogin()
    {
        alert("Logged in: " + loggedIn + "\nAuthenticated: " + authenticated);
    }
    // -->
    </script>
</head>
<body>
Testing!
<button onclick="testLogin()">Test login?</button>
<img src="http://deelay.me/5000/ http://example.com/image.gif">
</body>
</html>

这是一个测试
测试!
测试登录?

我不确定这将如何影响与您的站点的集成,但我无法想象这会是一个问题。如果有什么我想值得一试的话

只有一个暂停的映像会发生这种情况吗?是的。事实上,这就是它出现的原因。一个映像请求被标记为“挂起”超过一分钟,并且完全阻止了
getLoginStatus
方法。为了确保,您异步嵌入了JSSDK?实际上是方法试图使自己的请求被阻止了,而不是方法的调用?你看到了吗?你有一个测试页面来重现这个问题吗?异步加载图像不是一个选项。它破坏了大量的浏览器优化和其他功能。Facebook SDK在这里是外来元素,而不是图像。据我所知,问题是图像加载时间太长,并且被阻塞,因此如果您想更快地加载SDK,这几乎是唯一的选择。但是还有另一个解决办法——虽然不是一个好办法。我可以问一下为什么有人会否决我的答案吗?正如问题中明确指出的那样,阻塞图像是一个问题。