Javascript IE检测,为什么不使用简单的条件注释呢? [复制]

2023-11-26

为了检测 IE,大多数 Javascript 库都会使用各种技巧。

  • jQuery 似乎在页面的 DOM 中添加了一个临时对象来检测某些功能,
  • YUI2 在其用户代理上执行正则表达式YAHOO.env.ua = function() (file yahoo.js)

看完之后这个答案我认为这是真的,为了在 Javascript 中检测简单的 IE,我们可以简单地添加到我们的页面中:

<!--[if IE]><script type="text/javascript">window['isIE'] = true;</script><![endif]-->

<script type="text/javascript" src="all-your-other-scripts-here.js"></script>

Now the window.isIE为我们所有的 Javascript 代码设置变量,只需执行以下操作:

if(window.isIE)
   ...

除了这可能会导致痛苦,因为它必须添加到所有页面中,有什么我可能不知道的问题/注意事项吗?


仅供参考:我知道使用更好对象检测而不是浏览器检测,但在某些情况下您仍然需要使用浏览器检测。


詹姆斯·帕多尔西放了一个GitHub 上的小片段我将在这里引用:

// ----------------------------------------------------------
// A short snippet for detecting versions of IE in JavaScript
// without resorting to user-agent sniffing
// ----------------------------------------------------------
// If you're not in IE (or IE version is less than 5) then:
// ie === undefined
// If you're in IE (>=5) then you can determine which version:
// ie === 7; // IE7
// Thus, to detect IE:
// if (ie) {}
// And to detect the version:
// ie === 6 // IE6
// ie > 7 // IE8, IE9 ...
// ie < 9 // Anything less than IE9
// ----------------------------------------------------------

// UPDATE: Now using Live NodeList idea from @jdalton

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

当然,所有的功劳都应该归功于詹姆斯,我只是信使(但如果我的复制粘贴操作出错,请射击信使)。

还要查看创建的分叉。保罗·爱尔兰 (Paul Irish) 在一篇文章中解释了内部运作方式comment.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript IE检测,为什么不使用简单的条件注释呢? [复制] 的相关文章

  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • HTMLImageElement 作为 React Child 无效

    我正在尝试异步加载图像 并且仅在加载图像后才将其显示在 React 应用程序中 componentDidMount const img new Image img onload gt this setState originalImage
  • 是否可以禁用特定 jQuery Ajax 调用的 Turbolinks 以防止页面刷新和滚动?

    我有一个 Rails 5 应用程序 非常想使用 Turbolinks 在应用程序中 有几个 PATCH ajax 调用 它们只是用新数据更新服务器 但不需要担心更新页面的状态 每当这些 ajax 请求返回时 Turbolinks 就会刷新页
  • 使用selenium IDE提取部分文本并将其放入变量中

    有人可以告诉我应该使用哪个命令来使用 Selenium Ide 从文本中仅提取数字 694575 并将其放入变量中以供进一步使用 这是带有文本的 div div class loginBoxTitle Edit Exhibition Cen
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • Twisted 的 Deferred 和 JavaScript 中的 Promise 一样吗?

    我开始在一个需要异步编程的项目中使用 Twisted 并且文档非常好 所以我的问题是 Twisted 中的 Deferred 与 Javascript 中的 Promise 相同吗 如果不是 有什么区别 你的问题的答案是Yes and No
  • 从 x,y 屏幕空间坐标查找 2D 等距网格上的列、行(将方程转换为函数)

    我试图在屏幕空间点 x y 的二维等距网格中找到行 列 现在我几乎知道我需要做什么 即找到上图中红色向量的长度 然后将其与表示网格边界的向量的长度 由黑色向量表示 进行比较 现在我在数学堆栈交换中寻求帮助 以获得用于计算点 x y 与黑色边
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 如何清除WebGL中的矩形区域?

    WebGL 有一个clear清除整个表面的方法 清除表面的特定矩形的最佳方法是什么 例如 我想将一个从 50 50 开始的 100x100 像素框设置为全零 ARGB 0 0 0 0 我现在能想到的就是用一个写入零的片段着色器绘制一个四边形
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o

随机推荐

  • Android Studio 测试显示测试结果 0/0。我怎样才能开始测试?

    我正在 Android Studio 中学习 Kotlin 初学者课程 在测试阶段 检测结果总是0 0 我怎样才能完成这些测试 代码由 Google Android 开发人员编写 应该可以完美运行 我用的是同样的 应用程序编译没有错误 代码
  • 应用程序特定的权限设置不授予本地激活权限

    我的一位同事建议我可以在 GPO 中修复此错误 它是 Windows 2016 服务器 The application specific permission settings do not grant Local Activation p
  • 画布不在自定义视图中绘制

    我创建了一个自定义视图 CircleView 如下所示 public class CircleView extends LinearLayout Paint paint1 public CircleView Context context
  • 停止从 selenium webdriver 加载浏览器

    我的 selenium webdriver 转到一个页面并等待该页面完成加载 如果超过 30 秒 则会超时并且脚本失败 有没有办法让网络驱动程序在 30 秒后停止页面加载 比如按浏览器上的 x 这将防止我的驱动程序超时 我正在使用 Chro
  • 将文件发送到回收站

    目前我正在使用以下功能 file Delete 但是如何使用此函数将文件发送到回收站而不是直接删除它呢 Use 文件系统 删除文件并指定正确的回收选项 虽然这适用于 UI 交互式应用程序 但它不适用于非 UI 交互式应用程序 例如 Wind
  • 在类定义之外定义方法?

    class MyClass def myFunc self pass 我可以创建吗MyFunc 在类定义之外 甚至可能在另一个模块中 是的 您可以在类外部定义函数 然后在类主体中将其用作方法 def func self print func
  • Spring-boot调度器在没有@EnableScheduling注解的情况下运行

    我按照此示例在示例项目中创建计划任务 https spring io guides gs scheduling tasks 它说 EnableScheduling ensures that a background task executo
  • ChromeOptions 使用 Selenium ChromeDriver for node.js 导致引用错误

    我正在尝试使用 Selenium 的 ChromeDriver 驱动程序来使用 Chrome 运行一些测试 但是当我使用时出现引用错误ChromeOptions My Code 我想强制使用某些选项 例如针对特定的用户配置文件进行测试 基于
  • 八度向量解包

    Octave matlab 用于处理多个返回值的表示法 a b f x 表明 f x 返回的值是一种行向量 并且 Octave 支持向量解包 就像 Python 的元组解包 然而当我把 a b 1 2 I get 错误 常量表达式的输出参数
  • PHP 脚本被杀死且没有任何解释

    我按以下方式启动我的 php 脚本 bash cd path php f scriptname php php 脚本运行时没有任何输出 一段时间后 php 脚本响应 Killed 我的想法是它达到了内存限制 ini set memory l
  • 实体框架 6:检测关系变化

    在我的 DbContext 子类中 我重写了 SaveChanges 方法 因此我可以实现一种类似触发器的功能 在实际保存更改之前 现在 在其中一些触发器中 有必要检测某些关系是否发生了变化 无论是多对多 一对一 零等 我在互联网上阅读了许
  • 使用 GROUP BY 检索满足条件的记录

    我现在只想从几千条记录中选择计数大于 1 的行 换句话说 重复项 我主要看到的是 1 和一些 2 和 3 SELECT count AS Number GI FROM GeneralInformation AS GI GROUP BY Fi
  • 如何在 Android 客户端获取订阅的到期日期?

    我们正在 Android 中使用应用内购买来实现订阅 我们正在获取如下格式的购买时间戳 orderId GPA 1234 5678 9012 34567 packageName com example app productId examp
  • ASP.NET Core 标记帮助器,用于有条件地将类添加到元素

    在Asp Net MVC中 我们可以有条件地添加类 如下代码 div class div 如何通过使用 tagHelper 并删除条件中的其他部分来做到这一点 能够按照 tagHelper 提供的方式添加条件 css 类 此代码类似于 An
  • iOS 5 UINavigationBar 删除子视图(图像子视图)删除导航栏

    在我的应用程序中 在 iOS 4 上运行良好的导航栏从 iOS 5 开始消失了 这是我认为引起问题的原因 我正在删除 RootViewController viewWillAppear 方法中的子视图 for UIView view in
  • 芹菜、昆布和 django - 导入错误

    我正在使用 django 运行一个应用程序 我想使用 celery 来制作一些计划任务 根据官方文档 在我的 settings py 文件中 我设置了代理传输 BROKER URL django 并将 kombu transport dja
  • R从半标准字符串中提取时间分量

    Setup 我有一列持续时间作为字符串存储在数据框中 我想将它们转换为适当的时间对象 可能POSIXlt 大多数字符串都很容易使用解析这个方法 gt data lt data frame time string c 1 d 2 h 3 m
  • 在spark中对海量数据运行reduceByKey

    我在spark 中运行reduceByKey 我的程序是spark最简单的例子 val counts textFile flatMap line gt line split repartition 20000 map word gt wor
  • JAX-WS,身份验证和授权 - 如何?

    在 Web 服务中进行身份验证和授权的最佳方法是什么 我正在开发一组 Web 服务 需要基于角色的访问控制 使用 Metro SOAP 没有 EJB 的简单 java 我只想使用用户名和用户名对用户进行一次身份验证 密码 与数据库进行匹配
  • Javascript IE检测,为什么不使用简单的条件注释呢? [复制]

    这个问题在这里已经有答案了 为了检测 IE 大多数 Javascript 库都会使用各种技巧 jQuery 似乎在页面的 DOM 中添加了一个临时对象来检测某些功能 YUI2 在其用户代理上执行正则表达式YAHOO env ua funct