如何以编程方式检测用户代理是否阻止访问Facebook

时间:2011-04-26 12:32:24

标签: c# javascript facebook facebook-c#-sdk

我们正在开发一个使用FB Graph api服务器端,FB Javascript SDK和社交插件的Web应用程序(http://beta.dammela.it)。

与FB的整合深度,我们希望检测访问我们网站的用户何时在代理之后阻止Facebook属性的所有流量(例如在某些工作场所)。

如果我们发现他被阻止,我们可以给他/她一些提示,帮助,解释和一些替代方法来登录和与应用程序交互。

但我无法弄清楚如何做到这一点。

我想,但只是我的猜测,有一种方法可以检测用户访问Facebook是否被阻止检查Javascript SDK中的内容,但我无法找到什么和/或如何。

有什么想法吗?

5 个答案:

答案 0 :(得分:7)

<强>阐释:
我们尝试下载facebook favicon。如果它抛出错误,那么我们知道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#代码。

答案 1 :(得分:1)

我的建议是,因为你正在加载Facebook JS SDK是为了看看使用网络上的库中的动态脚本加载功能(我认为Google的Closure内置它)并尝试动态加载SDK。

此时你应该能够A.从尝试中捕获错误,或者B.查询脚本是否成功加载(通过框架提供的方法或仅通过调用SDK操作并检查是否获得某种未定义的错误。)

如果您无法加载暗示发生灾难性事件的SDK。

无论是FB移动JS文件的位置还是用户被代理和阻止(或者甚至FB都可能会被关闭)。

答案 2 :(得分:0)

让您的程序访问“http://www.facebook.com/”,看看您是否获得了当前主页上可以找到的类似源代码。如果可以的话,那就没有阻止Facebook了,否则它就是! :d

答案 3 :(得分:0)

我认为最合适的方法是创建一个特殊的测试页面,你可以通过fb api输出一些测试数据,两个按钮类似“我可以看到数据”“页面上没有数据”。根据用户的回答,您可以给他/她一个提示或继续工作

答案 4 :(得分: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>