如您所知,Facebook在许多国家被过滤,如果我们在页面中放置了“Like”按钮,他们将看到一条“ACCESS DENIED”消息互联网提供商而不是Like按钮。所以问题是,我可以检测Facebook是否可以由用户查看吗?所以我只显示Like按钮,如果用户有权访问Facebook并且没有被过滤。检测用户是否可以查看Facebook Like按钮
感谢
如您所知,Facebook在许多国家被过滤,如果我们在页面中放置了“Like”按钮,他们将看到一条“ACCESS DENIED”消息互联网提供商而不是Like按钮。所以问题是,我可以检测Facebook是否可以由用户查看吗?所以我只显示Like按钮,如果用户有权访问Facebook并且没有被过滤。检测用户是否可以查看Facebook Like按钮
感谢
测试如果域www.facebook.com
是通过加载favicon.ico
如果是访问,显示的iframe:
<iframe src="http://www.facebook.com/plugins/like.php" id="fbfm" style="display:none">
</iframe>
<script>
var fbicon = new Image();
fbicon.onload = function() {
document.getElementById("fbfm").style.display = "";
};
fbicon.src = "http://www.facebook.com/favicon.ico?" + Math.random();
</script>
智能解决方案,如果它没有加载,我如何显示错误?在你的代码中,这将显示iframe是否被加载,如果它没有加载,我想显示一个错误,例如:alert('cant connect to facebook'); – behz4d
+1非常有创意的解决方案! :) @ behz4d你可以添加一个'onerror'处理函数,或者检查'onload'处理函数中图像的尺寸,因为我认为这有时会被打到,无论它是否真的成功了,在这种情况下'width' 'height'将为0。 –
我想你可以设置一个非常小的宽度和高度上类似按钮的iframe,刚好够按钮本身,并希望任何“拒绝访问”消息有足够的填充不可见iframe的视口! :)
替代方法可能是“ping”Facebook,如发出AJAX请求并查看响应是什么。 但愿任何来自ISP的阻止响应都会包含一个HTTP 403状态代码,或者是合理的,但是如果不是的话,您将不得不刮掉返回的HTML并尝试确定您是否看到Facebook或错误页面,然后决定是否渲染类似的按钮。
不可用,因为它会加载另一个页面而不是Like按钮,在该页面中,还有一个JavaScript将用户重定向到另一个页面,这是因为我需要设法不显示Like按钮,否则“ACCESS DENIED”消息不是那么有害...关于ping,我只是查了一下,我可以ping它通常并没有403状态代码 – behz4d
该死的,值得一试。我的下一个建议是服务器端代理,但这不在这个问题的范围之内。 –
使用Facebook的JavaScript库:http://developers.facebook.com/docs/reference/javascript/
,并使用FB.getLoginStatus(...)函数来检查并决定要你的应用程序做什么。如果他们已经登录或不登录(connected
或not_authorized
),那么他们登录到Facebook,你可以显示你喜欢的按钮。如果状态是unknown
他们还没有登录,但可以看到Facebook。
如果facebook脚本没有加载或返回任何值,那么facebook可能被阻止,并且您不想显示您喜欢的按钮。
注:您还需要创建一个应用程序ID与Facebook链接您的JavaScript。
如果用户没有尝试登录,状态会是什么? –
是否用户真正看到一个“拒绝访问”消息,而不是只是没有看到按钮?你用什么代码来显示按钮? – rsp
是的,事情是,我在一个已过滤Facebook的国家,当我使用VPN连接到我的网站时,我可以看到Like按钮,它工作正常,许多人喜欢我的页面使用Like按钮,但当我没有连接到VPN时,我看到来自我的互联网提供商的“ACCESS DENIED”消息。我使用的是Facebook Like按钮生成器:http://developers.facebook.com/docs/reference/plugins/like/ – behz4d