【问题标题】:Why css class is not overridden for IE9?为什么 IE9 不覆盖 css 类?
【发布时间】:2019-07-13 00:44:28
【问题描述】:

我有一段 HTML 代码,我们在其中应用了 IE9、IE10 和 IE11 的特殊 css。

<!doctype html>
     <!--[if IE 9]><html data-placeholder-focus="false" lang="{%=user_locale_html}}" dir="ltr" class="ie9 lt-ie10 lt-ie11 lt-ie12 gt-ie8 gt-ie7 gt-ie6"><![endif]-->

     <!--[if !(IE)]><!--><html lang="{%=user_locale_html}}" dir="{%=dir}}">

<script>

  var ua = window.navigator.userAgent;

  if (ua.indexOf("Trident/7.0") > 0) 
    document.documentElement.className='ie11 lt-ie12 gt-ie10 gt-ie9 gt-ie8 gt-ie7 gt-ie6';
  else if (ua.indexOf("Trident/6.0") > 0)
    document.documentElement.className='ie10 lt-ie11 lt-ie12 gt-ie9 gt-ie8 gt-ie7 gt-ie6';

  if(/*@cc_on!@*/false){
    document.documentElement.className='gt-ie11 gt-ie10 gt-ie9 gt-ie8 gt-ie7 gt-ie6';
  }

</script>
<!--<![endif]-->
</html>

注意代码if(/*@cc_on!@*/false) {}

当我们有 userAgant=Trident/6.0. 时,此代码将覆盖在 IE10 中应用的 css 类(这导致我无法覆盖 ie10 类。

但我的问题是,为什么当浏览器是 IE9 时这段代码没有覆盖类?

我知道代码中不需要@cc_on 相关的东西,但我很想知道它的行为有何不同。

谢谢!

【问题讨论】:

  • IE 9?!我很惊讶有人在 2019 年甚至尝试支持 IE 9
  • cc_on 有一些very flaky support。您可能根本不应该尝试使用它
  • 你需要使用IE9的跨浏览器解决方案看看这个:w3schools.com/howto/howto_js_add_class.asp这里切换类名:w3schools.com/howto/howto_js_toggle_class.asp
  • 几乎所有浏览器也不再支持条件 cmets。我很久没有看到代码试图做这种事情了。现在几乎每个人都只支持“现代”浏览器
  • 感谢你们的快速回复:) 我理解这里所做的一切似乎已被弃用。当然,这是一个有 5 年历史的代码:D

标签: javascript html internet-explorer-9 conditional-comments


【解决方案1】:

可能您的代码没有识别 IE 9,这就是 CSS 类没有被覆盖的原因。

我建议你尝试参考下面的代码示例,它可以找到 IE 8、IE 9、IE 10、IE 11。

<!DOCTYPE html>
<html>
<head>
	<title>Page Title</title>
	<script>
	function GetIEVersion() {
  var sAgent = window.navigator.userAgent;
  var Idx = sAgent.indexOf("MSIE");

  // If IE, return version number.
  if (Idx > 0) 
    return parseInt(sAgent.substring(Idx+ 5, sAgent.indexOf(".", Idx)));

  // If IE 11 then look for Updated user agent string.
  else if (!!navigator.userAgent.match(/Trident\/7\./)) 
    return 11;

  else
    return 0; //It is not IE
}

if (GetIEVersion() > 0) 
   alert("This is IE " + GetIEVersion());
else 
   alert("This is not IE.");
	</script>
</head>
<body>

</body>
</html>

输出:

此外,您可以尝试根据您的要求对其进行修改,以帮助您解决问题。

【讨论】:

  • 您的代码看起来不错,但我想知道您的 MSIE 关键字是否适用于所有 IE11 情况?因为我在这里看到developers.whatismybrowser.com/useragents/explore/software_name/… IE11 的 userAgent 字符串不会一直包含 MSIE。
  • 我尝试用几个操作系统和 IE 11 测试这段代码。根据我的测试结果,我发现这段代码在 Win 7、Win 8.1、Win 10、Win Server 2012、Win Server 2016, Win Server 2019。在开发者工具中更改文档模式时可以识别IE的版本。
  • 感谢您的回答
猜你喜欢
  • 2013-07-05
  • 2021-04-10
  • 1970-01-01
  • 2019-03-06
  • 2022-01-16
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多