0

我想在我的网站上使用 facebook like 按钮。由于我的大多数访问者来自伊朗,而 facebook 在伊朗被过滤,如果有人来自伊朗,喜欢按钮会被过滤,页面会变得非常难看。我想防止这种情况是使用 webclient 尝试连接到 facebook。如果成功,我会放置like按钮,否则我不会:

string fb_result="failed";
WebClient webclient= new  WebClient();
try{
fb_result=webclient.DownloadString("http://www.fabebook.com");
}
catch{
 fb_result="failed"; //if its being filtered exception is raised
}

在我的 html 中:

<%if(fb_result)!="failed"){%>
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://www.mysite.com" data-send="true" data-width="450" data-show-faces="true"></div>
<%}%>

这工作正常,但问题是,当 webclient 无法连接时,引发错误需要很长时间。有什么方法可以让 webclient 尝试更短的时间,如果无法连接更快地引发错误。

顺便说一句,检查是否可以连接到 facebook 的任何其他方法都适用。因为这可能不是检查它的唯一方法。

4

1 回答 1

1

正如我在评论中所说,WebClient您编写的代码将不起作用,因为它是在服务器上执行的,因此它将尝试使用您的网络服务器的连接连接到 Facebook,这将始终成功(除非您的虚拟主机离线)。

最好的方法是让您的页面在浏览器中加载时发出 AJAX 请求。它应该请求 Facebook 上的已知资源(例如他们的主页,或“Like”图像本身)。当且仅当响应符合预期时,您的 AJAX 响应处理程序将加载其余的 Facebook 客户端脚本。如果您通过请求 Like 图像来测试它,那么您只需要检查响应的内容类型(即确保它是image/png);如果响应具有非 200 状态代码或请求超时,则不加载 Facebook 脚本。

于 2013-03-27T08:41:05.243 回答