Facebook 映像请求阻止FB.getLoginStatus
Facebook的Javascript SDK有一个名为Facebook 映像请求阻止FB.getLoginStatus,facebook,facebook-javascript-sdk,Facebook,Facebook Javascript Sdk,Facebook的Javascript SDK有一个名为getLoginStatus的方法,该方法会暂停(并且从不触发传入其中的回调),而页面上的图像请求也会暂停(即浏览器在很长一段时间内不会收到200或404) 如果您等待了很长时间,浏览器(?)最终关闭了获取图像的尝试,SDK将继续它的快乐之路 可能发生了什么,有没有办法预防?如果用户仅仅因为图像请求而无法登录或注册,这将非常不方便。您是否有adblockers设置?我在使用不同的API时遇到了类似的问题,Adblock Pro导致了一些问题
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,这几乎是唯一的选择。但是还有另一个解决办法——虽然不是一个好办法。我可以问一下为什么有人会否决我的答案吗?正如问题中明确指出的那样,阻塞图像是一个问题。