ご存知のように、Facebook は多くの国でフィルタリングされており、ページに「いいね」ボタンを配置すると、「いいね」ボタンの代わりに、インターネット プロバイダーからの「アクセスが拒否されました」というメッセージが表示されます。問題は、ユーザーが Facebook を表示できるかどうかを検出できるかどうかです。そのため、ユーザーが Facebook にアクセスでき、フィルタリングされていない場合は、[いいね] ボタンを表示するだけです。
ありがとう
ご存知のように、Facebook は多くの国でフィルタリングされており、ページに「いいね」ボタンを配置すると、「いいね」ボタンの代わりに、インターネット プロバイダーからの「アクセスが拒否されました」というメッセージが表示されます。問題は、ユーザーが Facebook を表示できるかどうかを検出できるかどうかです。そのため、ユーザーが Facebook にアクセスでき、フィルタリングされていない場合は、[いいね] ボタンを表示するだけです。
ありがとう
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に設定できると思います. :)
別の方法として、AJAX 要求を作成して応答を確認する場合のように、Facebook に "ping" を実行することもできます。うまくいけば、ISP からのブロックされた応答には HTTP 403 ステータス コード、または適切な何かが含まれているはずですが、そうでない場合は、返された HTML をスクレイピングして、Facebook が表示されているのかエラー ページが表示されているのかを自分で判断してから、いいねボタンをレンダリングするかどうか。
http://developers.facebook.com/docs/reference/javascript/にある Facebook JavaScript ライブラリを使用します。
FB.getLoginStatus(...) 関数を使用して、アプリケーションで実行する内容を確認して決定します。ログインしているかどうかに関係なく (connected
またはnot_authorized
)、Facebook にログインしており、いいねボタンを表示できます。ステータスがunknown
「まだログインしていませんが、Facebook を表示できる」の場合。
Facebook スクリプトが値をロードしない、または値を返さない場合、Facebook はおそらくブロックされており、いいねボタンを表示したくありません。
注: JavaScript をリンクするには、Facebook でアプリ ID を作成する必要もあります。