【问题标题】:Getting IE to load a different js file让 IE 加载不同的 js 文件
【发布时间】:2013-06-16 03:05:28
【问题描述】:

如果浏览器是 IE,则尝试让页面加载不同的 js 文件,但如果是任何其他浏览器,则尝试加载不同的 js 文件。我已经破坏了这个,但它不起作用,有人有什么想法吗?

感谢任何帮助:

<script type="text/javascript">
var ie = false;
</script>
<!--[if IE]>
<script type="text/javascript">
ie = true;
</script>
<![endif]-->
<script type="text/javascript">
if(ie == false)
{ 
document.write ("<script src="js/moreskins.js" type="text/javascript">")</script>;
} else {
    document.write ("<script src="js/ieskins.js" type="text/javascript">")</script>;
}
</script>

【问题讨论】:

  • 作为@Teemu noted,IE10 不支持条件cmets。 @UmairP's Answer 可能是针对 IE
  • @ZachL 好吧,这是可以使用document.write() 的极少数情况之一,我们不要破坏乐趣; )。无论如何,UmairP 答案的编辑部分确实是 OP 应该使用的方法,我刚刚指出,是什么让 OP 的代码不起作用......
  • @ZachL 我用它来修复 IE Canvas 标签中的渲染错误。我刚刚在我正在构建的网站上放了几个时钟,但是在 IE 中,它使线条比其他所有浏览器都细得多,所以我通过加载具有较粗线条的 IE 特定 javascript 来修复它。使用 CoolClock。
  • @JamesJ 啊,我明白了。 确实 在 IE 中看起来一团糟。但是,您可能会考虑,未来版本的 IE 可能不会有同样的“错误”,因此这种条件逻辑可能会为将来的问题做好准备。如果我是你,我可能会选择一个不同的时钟。 CoolClock 已经 3 年多没有更新了(这只是 2007 年代码库之上的一些修复。我确信那里有更好的东西,维护得更好,不需要黑客或浏览器检测。跨度>
  • 好吧,找到这样一个时钟并不像我想象的那么容易,但我确实找到了这个:jsfiddle.net/molokoloco/V2rFN

标签: javascript internet-explorer selection


【解决方案1】:

看起来你的最后一个脚本标签有点混乱,而且正如 Teemu 提到的,IE10 不支持条件 HTML cmets。

如果你真的需要以 IE 为目标,我会检查用户代理是否有“MSIE”:

<script type="text/javascript">
  var ie = !(navigator.userAgent.indexOf("MSIE")<0);
  if(ie == false) { 
    document.write ("<script src=\"js/moreskins.js\"></scr"+"ipt>");
  } else {
    document.write ("<script src=\"js/ieskins.js\"></scr"+"ipt>");
  }
</script>

【讨论】:

  • 这很奏效,谢谢 Ben,正是我需要的。
  • @Teemu 我无法得到它。可能是我对它很厚,抱歉,这个只是以简化的形式得到了我想要的。
  • 可能要记住,IE8 或更早版本不支持 indexOf。
  • 数组不支持,但字符串even in earlier versions of IE
  • 嗨,Ben,最后的
【解决方案2】:

使用条件 cmets 在 IE 中加载文件并在其他浏览器中忽略。

<!--[if IE]>
   <script src="js/ieskins.js" type="text/javascript">
<![endif]-->
<![if !IE]>
   <script src="js/moreskins.js" type="text/javascript">
<![endif]>

注意:else 部分 (&lt;![if !IE]&gt;) 不是评论。所以对于 IE 来说它是 else 的一部分,而对于其他浏览器来说,它什么都不是。

编辑

你也可以试试下面的代替document.write

var script = document.createElement('script');
   script.src = "js/moreskins.js";
   document.getElementsByTagName('head')[0].appendChild(script);

【讨论】:

  • 试过那个 Umair,但它不会在 IE 中选择第一个,也不会用 moreskins 覆盖它,我不知道为什么,这就是我选择编码方法的原因跨度>
  • 只是想到了一些事情:你需要一个明确的结束&lt;/script&gt;标签总是,否则它们不起作用。这很愚蠢,看起来并不重要,但这就是它的工作原理。也许这就是为什么 James 的 条件注释 方法不起作用的原因。
【解决方案3】:

这里的问题是结束 script 标记。使用document.write()添加脚本时,需要将结束标签切成小块。如下所示(注意固定的引用和括号)。

document.write('<script src="js/moreskins.js" type="text/javascript"></scr' + 'ipt>');

脚本执行停止,当解析器找到第一个文字结束标记时,这就是你需要在参数中剪切它的原因。

另外请注意,IE10 不支持条件 cmets,您应该使用特征检测而不是浏览器检测。

【讨论】:

  • 你有关于“将结束标签切成碎片”的参考吗?我从来没有听说过(但我从不使用document.write());-)
  • @ZachL 似乎在 MDN 和 MSDN 上都找不到,我稍后会处理这个问题,当我找到东西时会发表评论。
  • @ZachL 同时你可以自己尝试一下,用document.write()写一个脚本真的不能在参数中使用文字&lt;/script&gt;
  • 非常正确。而且非常有趣。我找到了这个,这让我很满意:stackoverflow.com/questions/236073/…
  • 显然document.write('&lt;script src="js/moreskins.js" type="text/javascript"&gt;&lt;\/script&gt;'); 也可以工作(在'ipt&gt; 之后你有一个意外的;)。
【解决方案4】:

我想我也会尝试编写一些代码 ;-)

<script>
(function(){
    var script = document.createElement("script"),
        is_ie = (/MSIE/gi.test(navigator.userAgent));
    script.src = (is_ie) ? 'js/ieskins.js' : 'js/moreskins.js';
    document.getElementsByTagName('head')[0].appendChild(script);
}());
</script>

【讨论】:

    【解决方案5】:

    使用 navigator.userAgent 更好更简单。您的代码在 IE 之外的任何其他浏览器中都不起作用,因为只有 IE 才能理解 &lt;!--[if IE]&gt; 的意思

    <script type="text/javascript">
        var ie = false;
        if(/MSIE/gi.test(navigator.userAgent)){
           ie = true;
        }
        if(ie == false)
        { 
        document.write ("<script src="js/moreskins.js" type="text/javascript">")</script>;
        } else {
            document.write ("<script src="js/ieskins.js" type="text/javascript">")</script>;
    
    }
    </script>
    

    【讨论】:

    • 有区别吗?在该条件注释中,OP 将预定义的变量值更改为 true 而不是 false。没有其他浏览器会这样做。而且您也包含了 OP 代码中的所有错误...
    • 您也可以稍微缩短该代码:var ie = (/MSIE/gi.test(navigator.userAgent));
    • @reyunan 欢迎来到 Stackoverflow。看起来你不想更正你的答案。这里所有错误的答案通常都会被否决...
    猜你喜欢
    • 2020-02-06
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多