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

28

我正在使用一个图片轮播脚本,对浏览器的负担比较大。它在Opera和Chrome中运行得很好,在FF中还可以,但是在IE中完全无法工作。因此,我想为IE用户提供简单的HTML替代方案,而不使用任何动作/JS。

该脚本不使用MT或jQuery,而是包含约380行的JS代码。是否有可能为IE用户提供纯HTML的替代方案?

var browserName=navigator.appName; if (browserName=="Microsoft Internet Explorer") { // 我可以使用什么命令? }


1
请注意,以下所有(或几乎所有)答案都提到了条件注释。自IE10起,条件注释已被弃用。请参阅http://blogs.msdn.com/b/ie/archive/2011/07/06/html5-parsing-in-ie10.aspx?Redirected=true。 - Adriano
其他人会在这里发布的问题中寻找答案,有时是在问题最初提出多年之后。@AdrienBe 友善地告诉其他人,带有条件评论的答案已不再可行。对弃用答案的反对票对于来到线程中学习如何解决此问题的人们非常有帮助。投票让其他人知道社区认为什么是最佳答案,以及哪些答案不应尝试。尽量不要显得受到这个过程的伤害。 - Stephen M Irving
10个回答

21

2
我发现使用 <!--[if lt IE 8]> 救了我的命。谢谢! - Michael De Silva
2
自IE10起,条件注释已被弃用。请参阅http://blogs.msdn.com/b/ie/archive/2011/07/06/html5-parsing-in-ie10.aspx?Redirected=true。 - Adriano
@AdrienBe 他们是在试图淘汰Internet Explorer吗?为什么要删除允许我们适应其缺陷的功能呢? - Super Cat
是的,自从Edge发布以来,他们一直在试图淘汰IE。 - Stephen M Irving

20

您可以像这样编写代码来包含特定于IE的JavaScript:

<!--[IF IE]>
    <script type="text/javascript">
        // IE stuff
    </script>
<![endif]-->

1
你忘记加上"!"了,我认为:<!--[IF IE]> - DPM
只是注意到这仅适用于IE9及以下版本。由于在2020年唯一使用的IE版本是IE 11,因此该方法不再可行。 - Stephen M Irving
你是正确的 - 请参见:https://dev59.com/EWYr5IYBdhLWcg3wTYgQ#22187600。希望没有人仍在专门为IE开发 :) - Seth

16

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

if (navigator.userAgent.match(/Trident\/7\./)) {
  // do stuff for IE.
}

最有用的最新答案。应该排在最前面。 - carla
你实际上不需要在开头使用双重感叹号“!!”,它会自动转换为布尔值。 - Stephen M Irving
此外,测试方法将比匹配方法更快。通常这样的微小优化并不重要,但由于您正在尝试在页面加载期间启动替代脚本,因此在这种情况下优化确实很重要。 - Stephen M Irving
@StephenMIrving 双感叹号有点语义化。比如说,如果你要用 TypeScript 写代码,它会在 if 语句中显示错误类型。所以基本上我手动进行类型转换。 此外,我认为 test 在这里更合适,虽然主要是出于语义目的,因为在这里优化微秒级别的性能不会给你带来很多利润。这不会运行多次,所以没有人会注意到这样的性能变化。 - Y.Puzyrenko
我必须强烈反对你的两点观点。双重否定是无用的臭气熏天的废话,没有任何价值。如果在TypeScript中有其用途,那也与本次讨论无关,因为我们正在讨论JS,而JS具有隐式类型转换作为一种特性。在此手动执行类型转换毫无意义。其次,正如我在原始答案中所解释的,该代码在页面加载时运行,并将分支脚本。每毫秒可以节省初始加载时间和TTCP,对于那些重视价值的公司来说,这个价值是可以量化的。 - Stephen M Irving

11

你可以定义一个布尔值,初始值为true。然后在一个IE条件注释中将其设置为false,使用该值来决定是否运行高级代码。示例代码如下:

<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之后不起作用。 - Stephen M Irving

4

var browserName=navigator.appName; 如果 (browserName=="Microsoft Internet Explorer") { document.write("这是IE浏览器的html代码") }

(注:此段代码判断当前浏览器是否为IE浏览器,如果是,则输出相应的html代码)

对于任何使用此答案的人,请先查看此帖子。IE 11与此方法存在一些兼容性问题。https://dev59.com/1GMm5IYBdhLWcg3wDrpR - Aaron Vanderwielen

1
尝试这个: 在所有浏览器中,systemLanguage和userLanguage都未定义。
if(navigator.userLanguage !== "undefined" && navigator.systemLanguage !== "undefined" && navigator.userAgent.match(/trident/i)) {
    alert("hello explorer i catch U :D")
  }

为什么需要前两个条件?如果您正确地了解它们在所有浏览器中都是“未定义”的,那么这些条件永远不会成立。如果它们仅适用于IE,则仍不必要,因为navigator.userAgent.match(/trident/) 只会对IE返回true。 - Stephen M Irving

1

这是我使用的脚本,它非常好用。我采用了 Ender 建议的布尔方法,因为其他只使用 IE 特定脚本的方法会向 IE 添加一些内容,但不会将原始代码删除。

    <script>runFancy = true;</script>
<!--[if IE]>
<script type="text/javascript">
    runFancy = false;
 </script> // <div>The HTML version for IE went here</div>
<![endif]-->

    // Below is the script used for all other browsers:
    <script src="accmenu/acac1.js" charset="utf-8" type="text/javascript"></script><script>ac1init_doc('',0)</script> 

0

-1

-3

这段代码在我的网站上运行良好,因为它检测是否为ie并在是的情况下激活javascript。您可以在ie或其他浏览器上实时检查它,这里有一个if ie javascript的演示

<script type="text/javascript">
<!--[if IE]>
window.location.href = "http://yoursite.com/";
<![endif]-->
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接