14

阻止 IE 绝对不是最佳实践,但这是我对现有应用程序的要求。由于条件注释在 IE 10中不可用,最有效的方法是什么?对于 IE 9 及以下版本,这将起作用:

<!--[if IE]>
<script type="text/javascript">
window.location = "/IEblocked.html";
</script>
<![endif]-->

假设有一个最佳实践 JavaScript 解决方案,我发现什么问题?我想知道是否可能存在以下问题:

  • 事件触发顺序
  • iframe超出我控制范围的元素
  • JS 解决方案在其他<script>标签上下文中的优先级
  • document.write('<script type="text/javascript" src="foo.js"></script>');通过该方法加载的脚本。

我有一种感觉,很多人可能会被迫大喊“使用 Modernizr”“你疯了吗,不要那样把脚本放在 DOM 中!” ,不幸的是,该应用程序很大,此时一些增强功能超出了范围。

4

3 回答 3

16

好吧,IE 是唯一支持客户端 VBScript 的浏览器。

因此,只需将其添加到您的页面:(当然除了 IEblocked.html 本身)

<script type="text/vbscript">
Document.Location = "IEblocked.html"
</script>

我知道它在 IE9 及以下版本中工作。这条评论几乎证明了它在 IE10 中仍然可以正常工作,至于未来,我遇到了 Eric Lippert 的这篇博客文章:VBScript 死亡的谣言被大大夸大了,其中包含以下段落:

在可预见的未来,我们将继续支持 VBScript 和 JScript。显然 VBScript、JScript、WSH 等必须永远随操作系统一起提供,因为大量现有的关键业务代码依赖于它们。将其描述为“慢慢死去”过于夸张。我们预计非托管 COM 脚本语言将继续有用很多很多年。Visual Studio 持续工程团队目前负责 VBScript、JScript、Windows Script Components、Windows Script Host 等。

尽管 8 年前发布,但我坚信我们在 Windows 核心中仍然存在多年的 VBScript,并且未来版本的 Internet Explorer 将继续使用它。

总而言之,我直接联系了 Eric 并询问“在 Internet Explorer 版本中,VBScript 作为客户端语言将支持多长时间?”。作为回应,他说:

仍然有许多企业客户在浏览器中依赖 VBScript,所以 MSFT 放弃对它的支持是愚蠢的。支持非常便宜,即使失去少数客户的好感也是昂贵的。

他不再在微软工作,所以他的回答不是官方的,但这是我能得到的最接近的答案,而不是多年前的博客文章,而是直接来自源头。考虑到所有因素,我可以得出结论,使用上面的代码将在未来很多年里工作。:)

于 2013-02-04T15:59:25.953 回答
5

你的客户疯了。但是,如果他们为此付钱,那么……嗯,随便。

如果您使用的是 jQuery,它提供了浏览器检测功能。它已被弃用,因此您可能希望避免使用最新版本,但它确实有效:

if ($.browser.msie) { ....do crazy stuff here.... }

如果您不使用 jQuery,或者您不想使用已弃用的功能,则可以通过以下方式进行:

  • 解析用户代理字符串:

    if(!!navigator.userAgent.match(/MSIE/)) { .... do crazy stuff .... }
    
  • 使用 Javascript 条件注释(我相信仍然支持):

    if(Function('/*@cc_on return document.documentMode > 0@*/')()){ .... do crazy stuff .... }
    

希望有帮助。

于 2013-02-04T15:56:59.770 回答
0

供将来参考这里是 ie 在 javascript 中的所有检测

<script type="text/javascript">

// if I am opera I need to not enter this function
if (!!(window.opera && window.opera.version)) {
    // ok now am I IE (opera is the only other browser that will do this
    if (document.all) {
        // Now lets look at the versions, use the ones you want

        // ie 5
        if (!(document.compatMode != undefined)) {
            // do ie 5 thing
        }
        else if ((document.compatMode != undefined) && (window.XMLHttpRequest == undefined)) {
            // do ie 6 thing
        }
        else if ((document.XMLHttpRequest != undefined) && (document.querySelector == undefined)) {
            // do ie 7 thing
        }
        else if ((document.querySelector != undefined) && (document.addEventListener == undefined)) {
            // do ie 8 thing
        }
        else if ((document.addEventListener != undefined) && (window.atob == undefined)) {
            // do ie 9 thing
        }
        else if (window.atob) {
            // do ie 10+ thing
        }
        else {
            // do ie 4 thing
        }
    }
}

于 2013-02-06T21:41:30.600 回答