0

自分のウェブサイトでFacebookのようなボタンを使いたいです。私の訪問者のほとんどはイランから来ており、Facebookはイランでフィルタリングされているため、誰かがイランから来た場合、「いいね」ボタンがフィルタリングされ、ページが非常に見苦しくなります。これを防ぐために私が考えたのは、webclientを使用してFacebookに接続しようとすることです。成功した場合は、いいねボタンを配置します。それ以外の場合は、配置しません。

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>
<%}%>

これは正常に機能しますが、問題は、Webクライアントが接続できない場合、エラーが発生するまでに多くの時間がかかることです。webclientの試行時間を短くし、接続できない場合はエラーをより早く発生させる方法はありますか。

ちなみに、Facebookへの接続が可能かどうかを確認する他の方法はありません。これがそれをチェックする唯一の方法ではないかもしれないので。

4

1 に答える 1

1

コメントで述べたように、作成したWebClientコードはサーバー上で実行されるため機能しません。そのため、Webサーバーの接続を使用してFacebookに接続しようとします。これは、常に成功します(Webホストがオフラインにならない限り)。

最善のアプローチは、ページがブラウザに読み込まれたときにページによってAJAXリクエストが行われるようにすることです。Facebook上の既知のリソース(ホームページや「いいね」の画像自体など)をリクエストする必要があります。AJAX応答ハンドラーは、応答が期待どおりである場合にのみ、残りのFacebookクライアントスクリプトをロードします。Like画像をリクエストしてテストする場合は、応答のコンテンツタイプを確認する必要があります(つまり、それがであることを確認しますimage/png)。応答に200以外のステータスコードが含まれている場合、または要求がタイムアウトした場合は、Facebookスクリプトをロードしません。

于 2013-03-27T08:41:05.243 に答える