大约一年前,我在互联网上寻找其他主要网站正在使用的技术(雅虎,谷歌,BBC等),并发现它们大多数都在使用某种形式的浏览器检测(JS、HTML if语句、基于服务器)。我也开始使用这种方式。在我最近工作的几乎所有网站上,我都使用jQuery,因此我使用内置的浏览器检测。
您使用这两个技术的原因是什么?
还有第三种选择:
尽可能减少或消除浏览器检测和CSS hack的需求。
我试图使用像jQuery插件这样的工具来自动处理浏览器差异(例如小部件等)。虽然不能解决所有问题,但可以做很多事情,并且将支持多个浏览器的工作委托给那些付出了更多努力的人,你无法或者不想承担这些努力。
之后我会遵循以下原则:
之后,我将浏览器分为几个层次:
第一层:
我的网站必须在这些浏览器上正常工作。
第二层:
我的网站应该在这些浏览器上运行。这可能会冒犯一些人,但是这些浏览器的市场份额太低了,它们并不像Firefox 3或IE7那样重要。
第三层:
除非有公司要求,否则将最小限度地努力使其适用于这些浏览器。IE6是噩梦般的一个,但是截至12月份,其市场份额为20%,并迅速下降。此外,对于阻止甚至禁止使用IE6的网站(例如金融网站)存在有效的安全问题,例如Paypal已经屏蔽了IE6,而Google告诉用户放弃IE6。
问题在于你只有一次机会处理CSS(因为它基本上是客户端的静态内容)……你不能(轻易地)在客户端实时调整它以适应不兼容情况,所以对于那些棘手的不兼容情况(而且这种情况太多了),检测很遗憾是最好的路线。我认为这种情况很难很快改变。
使用JavaScript,你可以通过像jQuery这样的库来避免大部分痛苦,而不是识别特定的浏览器(大多数情况下),而是检查功能支持。但某些情况下你需要确切知道(例如盒模型)。
你是否有使用或不使用这两种方法的原因?
是的。如果禁用JavaScript,则客户端浏览器检测会出现问题,并且可能无法正确地处理未来的浏览器版本。最后一个原因也适用于CSS hack。如果用户明确尝试破坏它,则服务器端浏览器检测会中断,但仍可能是一种可行的选择。
我的建议:
确保您的代码在符合标准的浏览器中正常工作-即在其中一个或两个浏览器中开发,并在之后检查browsershots.org。很可能可以使用一个样式表在所有浏览器中实现所需的结果。
然后,就有IE了。如果只有少数问题,您可以使用CSS hack。否则,请使用条件注释。
编辑:
如果我还必须支持古老的浏览器,我通常会采用优雅降级的方式:我只会让它们显示具有基本样式表(字体大小、颜色等)的纯HTML。所有花哨的东西都将使用@import
规则隐藏。
通常我喜欢为符合标准的浏览器(如Firefox和Safari)制作样式表,然后使用条件注释来检测Internet Explorer并提供一个额外的CSS文件,其中包含IE特定的修复和覆盖。
仅代表个人意见,请谨慎申请。
嗯,对于浏览器来说,黑客更快,但如果你正确地构建它,浏览器检测可以在CSS中提供更好的可读性。 如果您可以进行浏览器检测,并同时可以在浏览器之间共享CSS,并且仅在单独的文件或其他位置具有不同的CSS,则我将使用浏览器检测-因为这是新手可以理解的内容,而如果您不了解它们,则很难理解CSS黑客。
我更喜欢使用浏览器检测,并将与浏览器无关的CSS放入自己的文件中。
然而,最好的解决方案是找到默认情况下跨兼容的CSS,并直接使用它。
我尽量不使用它们。在很多情况下,IE存在的问题可以通过简化标记结构来避免。
如果您使用像Eric Meyer这样的合适的CSS重置,则会更加有帮助。
作为一种原则,我也正在逐渐放弃对IE6的支持,特别是考虑到IE6和IE7的最新安全问题 - 如果我们继续支持糟糕的浏览器,我们将无法改变人们的浏览习惯和浏览器偏好。
检测浏览器的服务器端有什么问题吗?似乎非常有效和无懈可击(除了用户更改其用户代理字符串)。您可以使用PHP选择页面的样式表,或为每个请求动态生成样式表 - 不确定其他语言是否允许您直接输出到文件并手动设置标头,但我想它们不可能不允许您识别用户代理,因此这些选项中的一个对于任何服务器端环境可能是可行的。