【问题标题】:Why IE10 loads older IE version stylesheet为什么 IE10 加载旧版 IE 样式表
【发布时间】:2014-04-04 15:17:14
【问题描述】:

我有以下 javascript:

    <script  type="text/javascript">
        var isMobile = {
            Android: function () {
                return navigator.userAgent.match(/Android/i);
            },
            BlackBerry: function () {
                return navigator.userAgent.match(/BlackBerry/i);
            },
            iOS: function () {
                return navigator.userAgent.match(/iPhone|iPad|iPod/i);
            },
            Opera: function () {
                return navigator.userAgent.match(/Opera Mini/i);
            },
            Windows: function () {
                return navigator.userAgent.match(/IEMobile/i);
            },
            any: function () {
                return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
            }
        };

        navigator.sayswho = (function () {
            var ua = navigator.userAgent, tem,
            M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i) || [];
            if (/trident/i.test(M[1])) {
                tem = /\brv[ :]+(\d+(\.\d+)?)/g.exec(ua) || [];
                return 'IE ' + (tem[1] || '');
            }
            M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
            if ((tem = ua.match(/version\/([\.\d]+)/i)) != null) M[2] = tem[1];
            return M.join(' ');
        })();
        var browserversion1 = navigator.sayswho.split(" ");
        var browserversion2 = browserversion1[1].split(".")[0].split(",");
        var isIeLessThan10 = (browserversion1[0] == "IE" || browserversion1[0] == "MSIE") && browserversion2[0] < 10
        //alert(isIeLessThan10);

        if (!isMobile.any()) {
            if (isIeLessThan10) {
                alert("IE<10");
                document.write('<link rel="stylesheet" href="theStyles/defaultStyle_ie.css" type="text/css" charset="utf-8" />');
                document.write('<link rel="stylesheet" href="theStyles/captionStyle_ie.css" type="text/css" charset="utf-8" />');
            }
            else {
                alert("IE>=10 || !IE");
                document.write('<link rel="stylesheet" href="theStyles/defaultStyle.css" type="text/css" charset="utf-8" />');
                document.write('<link rel="stylesheet" href="theStyles/captionStyle.css" type="text/css" charset="utf-8" />');
            }
        }
        else {
            alert("mobile");
            document.write('<link rel="stylesheet" href="theStyles/defaultStyle_mobile.css" type="text/css" charset="utf-8" />');
            document.write('<link rel="stylesheet" href="theStyles/captionStyle_mobile.css" type="text/css" charset="utf-8" />');
        }
</script>

上面的脚本检查浏览器是移动浏览器还是全功能浏览器。如果它是全功能浏览器,则检查 IE 版本是否小于 10,如果是则加载 defaultStyle_ie.css 样式表,否则如果是 IE10 或更高版本或任何其他浏览器加载 defaultStyle.css 样式表。在 FireFox、Chrome 和 IE8 中一切正常。当我在 IE10 中加载页面时,正在加载 IE8 版本的样式表。我该如何解决?

【问题讨论】:

  • 条件cmets而不是js怎么样?
  • 我还能用它来验证移动浏览器吗?我正在寻找加载三种不同类型的样式表,1. for less than IE82. IE10 and higher OR any other browser (FF, Chrome, etc.)3. Mobile
  • @skip405 据我所知,较新版本的 IE 不支持条件 cmets(实际上,我认为 IE10 已删除支持)。
  • 这就是为什么他们应该开始让用户代理字符串再次真正有用了;在我的 IE11 中,它甚至不再说 MSIE Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
  • @user3326071 查看我的答案以获取示例

标签: javascript html css internet-explorer-8 internet-explorer-10


【解决方案1】:

根据我的评论,加载普通样式表。

然后在移动设备中添加媒体条件。

然后加载IE9或更低的样式表

<!-- default stylesheets -->
<link rel="stylesheet" type="text/css" href="theStyles/defaultStyle.css">
<link rel="stylesheet" type="text/css" href="theStyles/captionStyle.css">

<!-- mobile stylesheets -->
<link rel="stylesheet" type="text/css" href="theStyles/defaultStyle_mobile.css" media='screen and (max-device-width: 480px)'>
<link rel="stylesheet" type="text/css" href="theStyles/captionStyle_mobile.css" media='screen and (max-device-width: 480px)'>

<!-- if ie version 9 or less -->

<!--[if lte IE 9]>
<link rel="stylesheet" type="text/css" href="theStyles/defaultStyle_ie.css">
<link rel="stylesheet" type="text/css" href="theStyles/captionStyle_ie.css">
<![endif]-->

【讨论】:

  • 谢谢...当我在 FIREFOX 和 CHROME 中加载它时,移动样式表也在使用中。我怎么不这样做?
  • 它会根据屏幕宽度加载其他样式表,所以您是否让您的 Firefox 和 chrome 窗口超小?这可能就是发生这种情况的原因(480 像素或更低)
  • 是的,没错 - 嗯,我不是 100% 肯定,如果我错了,我希望有人纠正我,但我认为 480px 涵盖了所有这些
  • 我会四处寻找,看看我发现了什么,如果有什么不同,我会在这里发布。感谢您的帮助
  • 这是我找到的。您想保留min-widthmax-width&lt;link media="only screen and (max-device-width: 480px) and (min-device-width: 320px)" href="mobile.css" type="text/css" rel="stylesheet" /&gt; 。有时也只有max-width 就足够了。
【解决方案2】:

问题是您在 IE 中处于兼容模式,然后它会发送旧版本。您可以通过按 F12 在开发控制台中检查模式

【讨论】:

  • 我刚查了一下,上面写着Browser Mode: IE10 Document Mode: IE9 standards
  • 有类似IE10(兼容模式)或者检查第二列是否为标准模式
  • 是的,这是标准模式
  • &lt;head&gt; 中是否存在这样的元标记? &lt;meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" /&gt;如果是的话,把它拿出来。此外,请尝试打开控制台并在浏览器检查中添加断点 - 您将确切看到当时返回的版本。
  • 我有这行:&lt;meta http-equiv="X-UA-Compatible" content="IE=9" /&gt;&lt;!-- removes outline for IE9 only--&gt;,我用它来删除链接周围的轮廓。这有冲突吗?
猜你喜欢
  • 2011-09-07
  • 2013-01-13
  • 2016-11-01
  • 2016-06-06
  • 2014-11-17
  • 2013-09-23
  • 2014-11-03
  • 2011-10-25
  • 1970-01-01
相关资源
最近更新 更多