2011-04-26 53 views
3

我們正在開發一個Web應用(http://beta.dammela.it),它使用FB Graph api服務器端,FB Javascript SDK和社交插件。如何以編程方式檢測用戶代理是否阻止訪問Facebook

與FB的集成深度很深,我們希望檢測訪問我們網站的用戶是否在阻止Facebook所有流量(如在某些工作場所)的流量代理之後。

如果我們能夠檢測到他被阻止,我們可以給他/她一些提示,幫助,解釋和一些替代方法來登錄和與應用程序進行交互。

但我無法弄清楚如何做到這一點。

我想,但只是我的猜測,有一種方法可以檢測用戶訪問Facebook是否被阻止檢查Javascript SDK中的某些內容,但我一直無法找出什麼和/或如何。

任何想法?

+1

如果Facebook被封鎖,則無法加載Javascript SDK。由於跨域問題,我會避免使用js。有些防火牆重定向到備用頁面,因此您無法檢查www.facebook.com是否存在,您需要檢查從facebook.com返回的內容,但是無法保證您要獲取哪個Facebook頁面,無論登錄頁面或其他東西。 – DannyKK 2011-04-26 12:44:59

回答

6

釋:
我們嘗試下載Facebook的圖標。如果它拋出一個錯誤,那麼我們知道Facebook被阻止。
注意:當一個代理阻塞一個URL,然後它返回一個4xx範圍內的錯誤返回給客戶端。

代碼:

var img = new Image(); 
img.onerror = function() { 
alert("It seems Facebook is blocked!"); 
} 
img.src = "http://facebook.com/favicon.ico"; 

你可以試試這個出here

更新:用客戶端JavaScript取代了服務器端C#代碼。

+0

感謝Mubix,這是一個很好的解決方案,只有我們需要能夠在JavaScript,客戶端這樣做。 – 2011-05-10 08:41:20

+0

哎呀..我的壞。用JS代碼更新答案。 – 2011-05-16 08:33:02

0

讓你的程序訪問「http://www.facebook.com/」,看看你是否得到了一個類似的源代碼,可以在當前主頁上找到。如果可以的話,那麼就沒有阻止Facebook或者它是! :D

+0

這個想法聽起來不那麼糟糕。但這意味着我必須做如下事情:1)將facebook.com加載到客戶端的隱藏iframe中,將結果發佈到加載facebook.com的服務器端頁面並比較結果。我可以在第一次訪問時做到這一點,然後存儲在一個cookie中,至少避免每次請求都做,但仍然很重。 – 2011-04-26 14:07:08

0

我認爲最恰當的方法是創建一個特殊的測試頁面,您可以通過fb api和兩個類似於「我可以看到數據」的按鈕輸出一些測試數據。「頁面上沒有數據」。根據用戶的回答,你可能會給他/她一個小費或繼續工作

+0

如果我正確理解你的方法,它會涉及一些用戶操作,它不會自動/程序化地完成,無需用戶干預。 – 2011-04-26 14:11:15

+0

@Max Favilli:是的,我的解決方案實際上並不是解決方案,它是解決方法。但你可以涉及JavaScript自動回答 – 2011-04-26 14:56:30

0

我的建議是,因爲你正在加載Facebook的JS SDK是看看使用動態腳本加載功能網絡(我認爲Google的Closure內置了它)並嘗試動態加載SDK。

此時,您應該能夠A.從嘗試中捕獲錯誤,或B.詢問腳本是否已成功加載(通過框架提供的方法或僅通過調用SDK操作並檢查您是否得到某種未定義的錯誤)。

如果您無法加載SDK意味着發生了災難性事件。

無論是移動JS文件的位置還是用戶被代理和阻止(或者甚至FB可能會關閉)。

+0

它不會工作,到目前爲止,我已經與兩個現實生活公司代理測試,都沒有阻止來自facebook.com的.js文件的下載,但阻止所有其他http流量到facebook域名。 – 2011-04-26 14:46:23

+0

現在好了,這是愚蠢的。如果是這樣的話,它幾乎聽起來像是如果用戶可以編輯他們的主機文件,並讓facebook.com成爲qwigybo.com,他們將能夠繞過代理。 – 2011-04-26 18:38:06

0

嘗試插入到HTML代碼如下:

<strong> 
<div class="fblikebutton_button" style="float: ; margin-left: 10px;"> 
    <iframe src="Delphi%20Certification%20Beta%20Program%20_%20Andreano%20Lanusse%20Blog%20_%20Technology%20and%20Software%20Development_files/like_002.htm" allowtransparency="true" style="border: medium none; overflow: hidden; width: 450px; height: 26px;" scrolling="no" frameborder="0"></iframe> 
</div> 
</strong> 



<div class="fblikebutton_button" style="float: ; margin-left: 10px;"> 
<iframe src="Delphi%20Certification%20Beta%20Program%20_%20Andreano%20Lanusse%20Blog%20_%20Technology%20and%20Software%20Development_files/like_002.htm" allowtransparency="true" style="border: medium none; overflow: hidden; width: 450px; height: 26px;" scrolling="no" frameborder="0"></iframe> 
</div> 
相關問題