浏览器资源嗅探器

Browser sniffing is bad. But sometimes unavoidable. But doing it on the server is bad, because UA string is unreliable. The solution is to use conditional comments and let IE do the work. Because you're targeting IE most of the times anyway.

浏览器嗅探是不好的。 但有时不可避免。 但是在服务器上这样做很不好,因为UA字符串不可靠。 解决方案是使用条件注释,然后让IE完成工作。 因为无论如何,大多数情况下都是以IE为目标。

In fact IE8 is a decent browser for the most practical purposes and often you're just targeting IE before 8.

实际上,对于大多数实际用途而言,IE8是一款不错的浏览器,通常您只是将目标指向8之前的IE。

Conditional comments in practice use the following pattern:

实际上,条件注释使用以下模式:

  1. Load the decent browsers CSS加载体面的浏览器CSS
  2. Conditionally load IE6,7 overrides有条件地加载IE6,7覆盖

The drawback is that IE6,7 get two HTTP requests. That's not good. Another drawback is that having a separate IE-overrides stylesheet is an excuse to get lazy and instead of solving a problem in a creative way, you (and the team) will just keep adding to it.

缺点是IE6,7获得两个HTTP请求。 这不好。 另一个缺点是拥有一个单独的IE覆盖样式表是懒惰的借口,您(和团队)不会继续以创造性的方式解决问题,而是会继续添加它。

We can avoid the extra HTTP request by creating our CSS bundles on the server side and having two browser-specific but complete stylesheet files:

我们可以通过在服务器端创建CSS捆绑包并拥有两个特定于浏览器但完整的样式表文件来避免额外的HTTP请求:

  1. The decent browsers CSS体面的浏览器CSS
  2. The complete CSS for IE6,7 not only the overridesIE6,7的完整CSS不仅覆盖

Then the question is loading one of the two conditionally without server-side UA sniffing. The trick (courtesy of duris.ru) is to use conditional comments to comment out the decent CSS so it's not loaded at all:

然后问题是有条件地加载两个服务器之一,而无需服务器端UA嗅探。 技巧(由duris.ru提供)是使用条件注释来注释出不错CSS,因此根本不会加载它:

<!--[if lte IE 7]>
<link href="IE67.css" rel="stylesheet" type="text/css" />
<![endif]-->
<!--[if gt IE 7]><!-->
<link href="decent-browsers.css" rel="stylesheet" type="text/css" />
<!--<![endif]-->

The highlighting suggests what the decent browsers see.

突出显示了不错的浏览器看到的内容。

IE6,7 see something like this after the conditional comments are processed:

在处理条件注释后,IE6,7会看到类似以下内容:

  <link href="IE67.css" rel="stylesheet" type="text/css" />
<!--
<link href="decent-browsers.css" rel="stylesheet" type="text/css" />
-->

Tell your friends about this post on Facebook and Twitter

在Facebook和Twitter上告诉您的朋友有关此帖子的信息

翻译自: https://www.phpied.com/browser-sniffing-with-conditional-comments/

浏览器资源嗅探器

浏览器资源嗅探器_浏览器嗅探条件注释相关推荐

  1. linux 火狐 清缓存,怎么清理新版火狐浏览器的缓存_浏览器指南

    怎么清理新版火狐浏览器的缓存_浏览器指南 发表时间:2020-09-29 来源:必杀器整理 软件安装:火狐浏览器 Mozilla Firefox,中文俗称"火狐"(正式缩写为Fx或 ...

  2. 去除浏览器ip检测_浏览器怎么多开换ip,每个窗口不同的独立IP-VMLogin中文版指纹浏览器...

    VMLogin中文版多账号防关联超级浏览器,是一款运用模拟浏览器硬件配置文件代替若干电脑的多任务浏览器,实现浏览器指纹防护功能,每个浏览器文件的Cookies.本地存储和其他缓存文件将被完全隔离,浏览 ...

  3. 浏览器工作流程_浏览器如何工作

    浏览器工作流程 by Alex Nadalin 通过亚历克斯·纳达林 浏览器如何工作 (How Browsers Work) Web应用程序安全性简介 (An Introduction to Web ...

  4. mysql 浏览器可视窗口_浏览器窗口的可视区域大小指的是哪里?

    可视区域就是:你可以看到的区域. 浏览器窗口显示网页的部分(即不包括地址栏.工具栏)就是可视区.. 你可以用鼠标来推动浏览器窗口来改变大小,此时可视区的大小也是跟着变的.. 下面送一份我总结的与可视区 ...

  5. chrome浏览器无法上网_浏览器无法上网

    在上网的时候由于一些设置的原因导致电脑无法正常的上网,如果您也遇到无法通过浏览器上网的问题该如何解决,下面就为大家带来浏览器无法上网的解决方法,希望以下的介绍能够帮助到您. 浏览器无法上网 1.如果出 ...

  6. javascript---001-运行原理01_前端三大技术_JS重要性_Atwood定律_JS应用_JS让人迷惑_TypeScript会取代JS吗_JS是一门编程语言_浏览器工作原理_浏览器内核

    javascript-001-运行原理01 1.前端三大技术 HTML CSS Javascript 2.Javascript的重要性 (1)javascript是很多框架的基础,Vue,React, ...

  7. 5调用外部浏览器打开代码_浏览器事件循环

    浏览器运行过程中会同时面对多种任务,用户交互事件(鼠标.键盘).网络请求.页面渲染等.而这些任务不能是无序的,必须有个先来后到,浏览器内部需要一套预定的逻辑来有序处理这些任务,因此浏览器事件循环诞生了 ...

  8. 怎么能避免浏览器请求超时_浏览器所允许的http请求最长的响应时间?

    最近遇到一个问题,就是前端发起http请求后,后端接近要10几分钟才能完整处理好并且响应回来,而浏览器在2分多种的时候,因为请求一直没有响应而failed了,虽然后面让后台优化流程去了.但是我却有了一 ...

  9. 浏览器配置异常_浏览器配置错误 设置为可信站点或调整当前浏览器模式

    "浏览器模式"功能在IE浏览器中的主要目的是为 web 开发人员若要测试该网站.当使用者造访网站也尚未支持新的 Internet Explorer,这也成为使用者对某项功能或某种方 ...

  10. java中浏览器下载文件_浏览器下载java项目中的文件

    有一些文件保存在项目中需要在浏览器打开的页面中下载,需要找准文件的存储路径 工程格式 2.代码 public String execute() throws Exception { HttpServl ...

最新文章

  1. 【C++】LINK类型错误分析记录
  2. 从零开始学安全(三)●黑客常用的windows端口
  3. MAX232和PL2303、CH340的区别
  4. Android-NDK-hello-jniCallback
  5. SAP UI5 Tools 运行了 fiori add deploy-config 命令之后,工程文件发生了哪些变化
  6. 16.unix网络编程一卷 unp.h
  7. 《计算机应用基础》在线考试,2018年自学考试《计算机应用基础》考试题及答案...
  8. vuejs 和 element 搭建的一个后台管理界面
  9. 【tyvj1520】 树的直径
  10. vue.js慢速入门(1)
  11. 关于突然不能上网的问题的解决
  12. CentOS 6.0 下 VNC 配置方法
  13. 消费卡“裸奔”倒计时!商务部:排查风险,异常发卡企业将上“黑名单”
  14. 坚果投影仪怎么才能访问电脑共享文件,详细的操作方法分享
  15. C51实现时钟12MHz,使用定时器T1的方式1定时20mS ,做一个时分秒的电子钟。
  16. 【Mysql】Communications link failure,The last packet sent successfully to the server was 0 millisecond
  17. iOS MP3流媒体播放 边缓冲边播放 FreeStreamer框架
  18. 爬虫实战——绝对通俗易懂,爬取房产数据
  19. Java开发教程!java手册中文版
  20. VCenter中安装虚拟机操作系统

热门文章

  1. python 类属性 对象属性_python 类属性、对象属性
  2. 内蒙古2021年高考成绩查询系统入口,2021年内蒙古高考成绩查询网址,内蒙古高考成绩查询系统时间安排...
  3. js实现基本图片切换功能
  4. 动态规划实战12 leetcode-472. Concatenated Words
  5. Introduction to Computer Networking学习笔记(十四):网络中为什么使用packet switching
  6. 20160205 - Windows 10 家庭版没有组策略
  7. K8S-删除Terminating状态的namespace
  8. Nodejs 使用Protobuf
  9. 一种破解静态链接库(.lib)的简单方法
  10. 最小发射功率下WSN的连通性和覆盖率