如果浏览器是 Internet Explorer:改为运行替代脚本

IT技术 javascript browser-detection
2021-02-21 08:05:33

我正在使用一个在浏览器上非常繁重的图像轮播脚本。它在 Opera 和 Chrome 中运行良好,在 FF 中表现不错,在 IE 中绝对让我大吃一惊。所以我想给 IE 用户一个没有任何动作/JS 的简单 HTML 的替代方案。

该脚本不使用 MT 或 jQuery 之类的 380 行 JS。是否可以为 IE 用户提供纯 HTML 替代方案?

var browserName=navigator.appName; if (browserName=="Microsoft Internet Explorer") { // what command can i use? }

6个回答

这篇文章很有解释性:http : //msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx

如果你的 JS 不显眼,你可以使用:

<![if !IE]>
   <script src...
<![endif]>
是的,自从 Edge 发布以来,他们一直试图杀死 IE。
2021-04-24 08:05:33
@AdrienBe 他们是否试图杀死 Internet Explorer?为什么要删除允许我们容纳其缺陷的功能?
2021-04-30 08:05:33
我发现 using <!--[if lt IE 8]>Saved by bacon。谢谢!
2021-05-10 08:05:33
自 IE10 起,条件注释已被弃用。请参阅blogs.msdn.com/b/ie/archive/2011/07/06/...
2021-05-13 08:05:33

您可以执行以下操作以包含特定于 IE 的 javascript:

<!--[IF IE]>
    <script type="text/javascript">
        // IE stuff
    </script>
<![endif]-->
请注意,这仅适用于 IE9 及以下版本。由于 2020 年唯一使用的 IE 版本是 IE 11,因此该方法不再可行。
2021-05-08 08:05:33
你忘记了“!”,我想:<!--[IF IE]>
2021-05-10 08:05:33
你是对的 - 请参阅:stackoverflow.com/a/22187600/65295希望没有人还在专门为 IE 开发:)
2021-05-14 08:05:33

对于 IE10+ 标准条件不起作用的原因是引擎更改或其他一些原因,原因,你知道,它是 MSIE。但是对于 IE10+,您需要在脚本中运行如下内容:

if (navigator.userAgent.match(/Trident\/7\./)) {
  // do stuff for IE.
}
@StephenMIrving double bang 有点语义。假设你打算用typescript写作,它会告诉你一个错误类型的错误被传递到 if 子句中。所以基本上我手动进行类型转换。另外我想说这test将是一个更好的匹配,尽管也主要用于语义目的,因为在这里优化微秒不会给你带来很多利润。这不会多次运行,因此没有人会注意到这种性能变化。
2021-04-20 08:05:33
最有用的最新答案。应该在顶部。
2021-04-23 08:05:33
您实际上并不需要一!!开始的双 bang就可以自动将其自身转换为布尔值。
2021-04-25 08:05:33
此外,测试方法将比匹配方法更快。通常,此类微优化并不重要,但由于您正在尝试在页面加载期间启动替代脚本,因此在这种情况下优化确实很重要。
2021-05-01 08:05:33
在这两点上我都强烈反对你。双爆是无用的臭绒毛,没有value。如果在 Typescript 中有一个无关紧要的目的,因为我们不讨论 Typescript 代码,那么这就是 JS,并且 JS 具有隐式类型强制作为功能。在这里手动进行类型强制是没有意义的。其次,正如我在原始答案中所解释的那样,此代码正在页面加载时运行,并将分支脚本。可以减少初始加载时间和 TTCP 的每一毫秒都是有value的,对于公司来说,这个value可以用美元来量化。
2021-05-15 08:05:33

您定义一个默认为 true 的布尔值,然后在IE 条件注释中,将该值设置为 false,并使用 this 的值来确定您的高级代码是否应该运行。就像是:

<script type="text/javascript">var runFancy = true;</script>
<!--[if IE]>
<script type="text/javascript">
    runFancy = false;
    //any other IE specific stuff here
</script>
<![endif]-->
<script type="text/javascript">
    if (runFancy) {
         //do your code that works with sane browsers
    }
</script>
不再是一个可行的答案。条件标签在 ie 9 之后不起作用
2021-04-21 08:05:33

var browserName=navigator.appName; if (browserName=="Microsoft Internet Explorer") { document.write("Your html for IE") }

对于使用此答案的任何人,请先查看此帖子。IE 11 与这种方法存在一些兼容性问题。 stackoverflow.com/questions/17907445/how-to-detect-ie11
2021-05-07 08:05:33