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

Posted

技术标签:

【中文标题】如果浏览器是 Internet Explorer:运行替代脚本【英文标题】:If Browser is Internet Explorer: run an alternative script instead 【发布时间】:2011-05-23 15:08:38 【问题描述】:

我正在使用一个图像轮播脚本,它在浏览器上非常繁重。它在 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?

【问题讨论】:

请注意,以下所有(或几乎)答案都提到了条件 cmets。自 IE10 起,条件 cmets 已被弃用。见blogs.msdn.com/b/ie/archive/2011/07/06/… 其他人来到此处发布的问题寻求答案,有时是在最初向维克多提出问题多年后。 @AdrienBe 礼貌地让其他人知道条件 cmets 的答案不再可行。对已弃用的答案投反对票有助于人们来到线程了解如何解决这个问题。投票让其他人知道社区认为什么是最好的答案,哪些答案不应该尝试。尽量不要因为这个过程而显得那么受伤。 【参考方案1】:

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

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

<![if !IE]>
   <script src...
<![endif]>

【讨论】:

我发现使用培根保存的&lt;!--[if lt IE 8]&gt;。谢谢! 条件 cmets 自 IE10 以来已被弃用。见blogs.msdn.com/b/ie/archive/2011/07/06/… @AdrienBe 他们是否试图杀死 Internet Explorer?为什么要删除允许我们适应其缺陷的功能? 是的,自 Edge 发布以来,他们一直试图杀死 IE。【参考方案2】:

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

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

【讨论】:

你忘记了“!”,我想:【参考方案3】:

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

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

【讨论】:

最有用的最新答案。应该在顶部。 您实际上并不需要在开始时使用双键!!,它会自动将自身转换为布尔值。 另外,测试方法将比匹配方法更快。通常,此类微优化并不重要,但由于您尝试在页面加载期间启动备用脚本,因此在这种情况下优化确实很重要。 @StephenMIrving 双爆炸有点语义。假设你要在打字稿中写作,它会向你显示一个错误类型的错误被传递到 if 子句。所以基本上我手动进行类型转换。另外我想说test 在这里会更匹配,但也主要用于语义目的,因为在这里优化微秒不会给你带来很多利润。这不会运行多次,所以没有人会注意到这种性能变化。 我在这两个方面都强烈反对你。双爆炸是无用的臭绒毛,没有任何价值。如果在 Typescript 中有一个无关紧要的目的,因为我们没有讨论 Typescript 代码,那么这就是 JS,而 JS 具有隐式类型强制作为一个特性。在这里手动进行类型强制是没有意义的。其次,正如我在原始答案中解释的那样,此代码正在页面加载时运行,并将分支脚本。可以缩短初始加载时间的每一毫秒,TTCP 都是有价值的,对于公司来说,价值可以用美元来量化。【参考方案4】:

您定义一个默认为 true 的布尔值,然后在 IE conditional comment 内,将该值设置为 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>

【讨论】:

不再是一个可行的答案。条件标签在 9 之后不起作用【参考方案5】:

var browserName=navigator.appName; if (browserName=="Microsoft Internet Explorer") document.write("你的 IE 浏览器 html")

【讨论】:

对于使用此答案的任何人,请先查看此帖子。 IE 11 与这种方法存在一些兼容性问题。 ***.com/questions/17907445/how-to-detect-ie11【参考方案6】:

这是我使用的脚本,它就像一个魅力。我使用了 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> 

【讨论】:

【参考方案7】:

试试这个: systemLanguage 和 userLanguage 在所有浏览器中都未定义。

if(navigator.userLanguage !== "undefined" && navigator.systemLanguage !== "undefined" && navigator.userAgent.match(/trident/i)) 
    alert("hello explorer i catch U :D")
  

【讨论】:

为什么需要前两个条件?如果您正确地认为它们在所有浏览器中都是 "undefined",那么这些条件永远不会成立。如果它们仅适用于 IE,则它们仍然没有必要,因为 navigator.userAgent.match(/trident/) 只会为 IE 返回 true。【参考方案8】:

请注意,您还可以在纯 js 中确定脚本正在通过哪个浏览器执行:window.navigator.userAgent

但是,这不是推荐的方式,因为它可以在浏览器设置中进行配置。更多信息可在此处获取:https://developer.mozilla.org/fr/docs/DOM/window.navigator.userAgent

【讨论】:

【参考方案9】:

在 Microsoft 的开发人员档案中查看此脚本:https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx

我在很多项目中都使用过这个脚本,从来没有遇到过任何问题。

【讨论】:

【参考方案10】:

此代码在我的网站上运行良好,因为它会检测其是否为 ie 并激活 javascript,如果它在其下方,您可以在 ie 或其他浏览器上实时查看 Just a demo of the if ie javascript in action

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

【讨论】:

以上是关于如果浏览器是 Internet Explorer:运行替代脚本的主要内容,如果未能解决你的问题,请参考以下文章

为啥在安装Windows Internet Explorer 7的时候,提示"此操作系统不支持Windows Internet Explorer 7.

如何在 Internet Explorer 浏览器的 JavaScript 中修复数组 indexOf()

是否可以将Internet Explorer滚动条箭头居中?

Internet Explorer 7 iframe,使高度 100%

不想用最新版的Windows internet Explorer8版本的浏览器,我想恢复到老版,怎么样弄呀?

在Windows Server 2012启用或关闭Internet Explorer增强的安全配置