2011-05-31 85 views

回答

3

服务器端浏览器检测或功能检测是出了名的错误。

在服务器上用户拥有的浏览器的唯一可见性是用户代理字符串。

不幸的是,这是完全不可靠的,因为它可以被客户欺骗。由于各种防火墙和安全产品的原因,它也经常被隐藏起来,一些代理也会修改或删除它。

简而言之,没有可靠的方法从服务器检测浏览器。

我对你有两个建议:

1)使用AJAX方法。正常情况下(使用Modernizr或您最喜欢的其他技术)在Javascript中检测功能,然后将检测结果发送回服务器。如果用户真的想要这样做,它仍然可以被拦截和欺骗,但是不太可能,并且肯定会解决我用防火墙和代理描述的问题。

2)为什么关心SVG的支持,当唯一不支持它的浏览器是IE8(或更低)? IE支持VML,而且有许多Javascript工具可用于将SVG转换为VML,因此使用SVG的应用程序可以在所有浏览器中运行。我最喜欢的是Raphael,但拉斐尔是绘制图形的库;既然你已经有了SVG,你可能会发现一个简单的转换库更有用。像这样的东西,或许:http://code.google.com/p/svg2vml/或者这个:http://code.google.com/p/svgweb/

希望有帮助。

+0

这是因为我使用的图表库无法对SVG和VML使用相同的格式代码。所以如果我在一个上看起来不错,那么看起来就不好。所以为了解决这个问题,我想检测他们是否有SVG,然后使用备用样式。我无法使用Ajax,因为我需要在第一页渲染时执行操作。看起来我必须检测浏览器。 – KingOfHypocrites 2011-06-02 18:25:02

+0

@King:我想我会建议使用更好的制图库,如Raphael(及其姐妹制图库g.Raphael),它使SVG/VML翻译变得透明。但是听起来你已经在一段不同的路上走了一段距离,所以便宜的答案只是检测IE8并降低,并希望你的用户为你提供有效的UA。 – Spudley 2011-06-03 07:51:44

+1

尽管如果他们想要的话,几个Android设备也不支持SVG(他们选择不用它们来节省内存使用)。所以说普通的浏览器都支持SVG或VML是不公平的。有时你必须回退到服务器渲染的PNG图像。 – 2011-12-24 17:23:04