如您所知,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