如何仅在IE中加载脚本

Dav*_*ins 30 javascript internet-explorer conditional-statements

我需要在Internet Explorer浏览器中触发特定脚本!

我试过这个:

<!--[if IE]> 
<script></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

不幸的是,这实际上阻止了脚本的加载.

编辑:对于每个人都在问我为什么需要这个:当使用一些动画时,IE使滚动非常跳跃.为了解决这个问题,我需要实现一个向IE提供平滑滚动的脚本.我不想将它应用到其他浏览器,因为它们不需要它和这个脚本虽然使滚动更平滑也使它有点不自然.

nde*_*ore 67

我很好奇为什么你特别需要针对IE浏览器,但如果真的是你需要做的话,下面的代码应该可以工作:

<script type="text/javascript">
    if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent))
        document.write('<script src="somescript.js"><\/script>');
</script>
Run Code Online (Sandbox Code Playgroud)

Regex(MSIE \d)的前半部分用于检测Internet Explorer 10及更低版本.下半部分用于检测IE11(Trident.*rv:).

如果浏览器的用户代理字符串与该模式匹配,则它将附加somescript.js到页面.

  • 好吧,它发生了IE有这个神话般的功能,称为平滑滚动("工具> Internet选项>高级>"使用平滑滚动")默认情况下选择并实际接缝创建所有类型的问题,而不是解决任何问题. case我有一些滑入式动画,只有在IE上才会使滚动非常跳跃,除非你关闭了平滑的滚动.所以我需要为IE添加一个滚动脚本. (4认同)

vsy*_*ync 16

currentScript在除IE之外的所有浏览器中 [支持][1]

<script>
    // self-invoked wrapper for scoping the `document` variable
    !function( d ) {
        if( !d.currentScript ){
            var s = d.createElement('script')
            s.src = 'ie.js'
            d.head.appendChild(s)
        }
    }(document)
</script>
Run Code Online (Sandbox Code Playgroud)

以上将有条件地附加一个仅适用于 IE 浏览器的脚本文件。[1]:https : //developer.mozilla.org/en-US/docs/Web/API/Document/currentScript#Browser_compatibility

  • 这是迄今为止最优雅的答案。 (3认同)

小智 5

如果仍然有人在考虑运行IE特定的Javascript,则此代码仍可以在IE(11)和非IE浏览器(Chrome,Firefox,Edge)上进行测试

<script type="text/javascript">
    if(/MSIE \d|Trident.*rv:/.test(navigator.userAgent))
        document.write('<script src="../nolng/js/ex1IE.js"><\/script>
        <script src="../nolng/js/ex2IE.js"><\/script>');
    else
        document.write('<script src="../nolng/js/ex1.js"><\/script>
       <script src="../nolng/js/ex2.js"><\/script>');
</script>
Run Code Online (Sandbox Code Playgroud)