仅在不运行Internet Explorer时才运行脚本

chr*_*lls 4 html javascript internet-explorer

除了Internet Explorer之外,我如何在每个浏览器中运行脚本?

我在我的网站上使用queryloader2,并且(无论出于什么原因)在IE9中加载大约需要一分钟,我在IE的旧版本中假设相同或更差.在任何其他浏览器中,它只是几秒钟.因此,我想在任何版本的IE中都没有运行脚本(它并没有真正损害网站的功能).

ant*_*rat 6

您需要使用条件注释:

<!--[if !IE]>
    <script src="myScript.js" type="text/javascript"></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)


Mah*_*dsi 5

所有其他答案中的条件注释(在发布本文时)都是不正确的,并且将被解释为(无效)HTML 或在非 IE 浏览器中被完全忽略为 HTML 注释。

重要的是要理解,对于 IE 以外的任何浏览器(甚至是较新版本的 IE)而言,“条件 HTML 注释”只是注释。换句话说,类似于赞成答案的建议:

<!--[if !IE]>
    <script src="myScript.js" type="text/javascript"></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

就 IE 以外的任何内容而言,只是一个长注释,从第<!--1 行开始到第 3 行结束-->,就像任何其他 HTML 注释一样。

要让 IE 忽略 HTML 块,您必须利用 HTML 注释不支持嵌套的事实,即<!-- <!-- --> something -->注释以第一个 -->而不是第二个结束,这意味着something -->将被解析为 HTML 而不是被视为评论的一部分。

所以我们能做的就是使用这样的东西:

<!--[if !IE]-->
    <script type="text/javascript" src="script.js"></script>
<!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

在这里,非 IE 浏览器将看到两个单独的注释(分别在第一行和第三行)和中间的常规 HTML。但是解析这些标签的浏览器会看到从第一行开始的注释,然后忽略所有内容,直到 <![endif]-->在第三行遇到。这为我们提供了一段代码,该代码块将由非 IE/现代浏览器执行,但会被支持条件 HTML 的旧版本 IE 忽略。