如何使用纯JavaScript确定Facebook/Twitter是否被阻止?

如何使用纯JavaScript确定Facebook/Twitter是否被阻止?,javascript,Javascript,中国等一些国家正在屏蔽Facebook/Twitter。如何使用JavaScript检查网站是否不可访问 更新: 我在网页上添加了一个“分享到Facebook”按钮。50%的游客来自中国,50%来自中国境外 对于那些中国访客来说,他们永远不会看到Facebook按钮,因为它被屏蔽了。如果我检测到Facebook被阻止,我想使用$.hide()或$.empty()删除相关的HTML。我该怎么做呢?像这样使用: $.get("http://facebook.com").fail(function()

中国等一些国家正在屏蔽Facebook/Twitter。如何使用JavaScript检查网站是否不可访问

更新:

我在网页上添加了一个“分享到Facebook”按钮。50%的游客来自中国,50%来自中国境外

对于那些中国访客来说,他们永远不会看到Facebook按钮,因为它被屏蔽了。如果我检测到Facebook被阻止,我想使用
$.hide()
$.empty()
删除相关的HTML。我该怎么做呢?

像这样使用:

$.get("http://facebook.com").fail(function() {
    $(...).hide()
}).done(function() {
    $(...).show()
})
  $.getScript('//connect.facebook.net/en_UK/all.js')
  .success(function(){
        // do something if facebook is available 
  });
请注意,这是一个跨站点请求,除非禁用浏览器功能,否则出于安全原因,该请求将失败


如果您不可能这样做,我建议您使用GeoIP或类似技术来确定用户来源。

您可以检查加载facebook SDK是否在中国被阻止(
//connect.facebook.net/en_UK/all.js

如果是这种情况,您可以这样做:

$.get("http://facebook.com").fail(function() {
    $(...).hide()
}).done(function() {
    $(...).show()
})
  $.getScript('//connect.facebook.net/en_UK/all.js')
  .success(function(){
        // do something if facebook is available 
  });
您需要小心,因为如果要对
fail
案例进行回调,您需要定义一个超时。我需要稍后检查正确的设置,但目前我没有时间

编辑

根据funkybro的评论,最好执行JSONP请求。加载API将注入大量您可能不需要的代码。 因此,只需请求,例如:

$.getJSON('https://graph.facebook.com/feed?callback=?')
.success(function(){
     // do something if facebook is available 
});

请求将包含一个失败代码,因为您没有在graph node上提供,但知道您从facebook收到错误消息意味着客户端可以访问该消息。

尝试获取您知道存在的页面?:Psmall形象可能更容易;设置一个onload处理程序,如果它在短时间内没有启动,网站可能无法访问(在他们删除该图像之前工作)。你可能可以检查js web api在中国是否也被阻止,如果是,你可以通过尝试加载api来解决这个问题,如果失败,那么它很可能被阻止,或超时。此操作的可能副本将始终失败,因为它会导致请求的资源上不存在“Access Control Allow Origin”头。错误。除非在关闭该功能的情况下启动浏览器,否则将失败。对于钱包JS,这是我能想到的唯一解决方法。当然,但这是针对访客的,我不认为告诉所有访客打开安全功能是一个好的解决方案。@t.niese我同意。我在这篇文章中添加了一条注释,简要描述了这个问题go@funkybro是的,JSONP这是一个比加载api更好的选择,因为它不会向页面注入facebook代码,至少如果他们只是用一个脚本来回复,该脚本只是调用JSONP回调,他们希望这样做:D。