【问题标题】:if IE10 or IE11 display different image如果 IE10 或 IE11 显示不同的图像
【发布时间】:2016-08-12 08:48:32
【问题描述】:

我需要这样的东西:

<img src="image.svg" />

<!--[if IE ]><img src="image.png" /><![endif]-->

由于条件 cmets 在 IE10 和 IE11 中不再工作,我无法完成此操作。 可用于针对新 Internet Explorer 的 Javascript 似乎复杂且不可靠。但也许我错了,有一些简单的解决方案。

感谢您的帮助

【问题讨论】:

  • 检测这个纯粹的客户端将比它的价值更麻烦。
  • 您最好使用样式并为 IE 加载不同的样式表。对不受支持的浏览器使用 png 后备,或使用诸如 modenizr 之类的东西,将类添加到 html 标签
  • 我不明白为什么这个问题值得立即投反对票。除了在 Internet Explorer 上,SVG 可以完美运行。它错误地渲染了这个特定的 SVG,尝试找到一种方法来用 PNG 替换它是合乎逻辑的
  • 如果 svg 无法加载,它是否会在 IE 中出现错误?如果是这样,你可以这样做&lt;img src="image.svg" onerror="this.src='image.png'" /&gt;

标签: javascript jquery html css internet-explorer


【解决方案1】:

我认为没有任何脚本很难做到。 @eisbehr 给出的答案会很好用。但是如果你不想使用除 jQuery 之外的任何其他插件,你可以检查 documentMode 并在 body 中添加一些信息。然后让 css 决定显示什么。

注意:它在 Edge 中不起作用。该代码是专门为 IE10 和 IE11 编写的,因为这是 OP 要求的。但是可以针对不同的版本进行调整。但后来我会选择@eisbehr 的答案。

$(function() {
    if( document["documentMode"] ) { // If Internet Explorer 10, 11
        var cssClass = "ie" + document["documentMode"];
        $('body').addClass(cssClass);
    }
});
.ie-dependant {
  display:none;
}

body.ie11 .ie-dependant.ie11 {
  display: block;
}

body.ie10 .ie-dependant.ie10 {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ie-dependant ie10">
  This is ie 10.
</div>

<div class="ie-dependant ie11">
  This is ie 11.
</div>

或者,您可以在服务器端检测到这一点,并让服务器返回不同的样式表。

【讨论】:

    【解决方案2】:

    没有内置或默认解决方案。您必须创建自己的或使用其他工具。在浏览器端,您可以使用ModernizrbrowserjQuery.browser 等工具,然后使用JS 进行检查。

    if( browser.msie && browser.version >= 10 ) {
        // browser is IE10 or 11
    }
    

    Modernizer 更加复杂,有很多可能性。这可以帮助您:

    if( !Modernizr.svg ) {
        var imgs = document.getElementsByTagName('img');
        var svgExtension = /.*\.svg$/
        var l = imgs.length;
    
        for( var i = 0; i < l; i++ ) {
            if( imgs[i].src.match(svgExtension) ) {
                imgs[i].src = imgs[i].src.slice(0, -3) + 'png';
            }
        }
    }
    

    可以在here找到有关此示例的模式详细信息。

    【讨论】:

    • 我也正要推荐 Modernizr。 :-) 似乎可能是最方便的方式
    • Modernizr 并不是用于检测浏览器,而是浏览器具有的功能。 stackoverflow.com/questions/13478303/…github.com/Modernizr/Modernizr/issues/203
    • 这就是为什么modernizer 示例使用!Modernizr.svg 来检查svg 兼容性并且不进行浏览器检查的原因。 ;) @smoksnes
    • @eisbehr,是的。非常聪明。顺便说一句,谢谢编辑。干净多了。
    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 2017-06-30
    • 2017-12-18
    • 2017-07-29
    • 1970-01-01
    • 2017-11-01
    • 2019-06-25
    • 2011-05-24
    相关资源
    最近更新 更多