阻止现代IE?

时间:2013-02-04 15:43:56

标签: javascript internet-explorer browser-detection

阻止IE绝对不是最佳做法,但它符合我对现有应用程序的要求。自IE 10中conditional comments aren't available以来最有效的方法是什么?对于IE 9及更低版本,这将起作用:

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

假设有一个最佳实践JavaScript解决方案,我可以找到 gotchas 吗?我想知道以下是否存在问题:

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

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

2 个答案:

答案 0 :(得分:15)

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

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

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

我知道它在IE9及以下版本中运行。 This comment几乎证明它在IE10中仍然运行良好,至于未来我遇到了Eric Lippert撰写的这篇博文:Rumours of VBScript's Death Have Been Greatly Exaggerated其中包含以下段落:

  

我们将在可预见的未来继续支持VBScript和JScript 。显然,VBScript,JScript,WSH等必须继续随操作系统一起提供,因为大量现有的业务关键代码依赖于它们。将“死亡缓慢死亡”的特征描述为过于戏剧化。我们希望非托管COM脚本语言将在很多年内继续使用。 Visual Studio Sustaining Engineering Team目前负责VBScript,JScript,Windows脚本组件,Windows脚本宿主等。

虽然8年前发布,但我强烈相信我们仍然在Windows的核心存在多年的VBScript,未来版本的Internet Explorer将继续使用它。

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

  

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

他不再在微软工作,所以他的答案不是正式的,但它是我能得到的最接近的,而不是多年的博客文章,而是直接来自消息来源。考虑到所有因素,我可以得出结论,使用上述代码将会在未来的许多年内发挥作用。 :)

答案 1 :(得分:4)

你的客户很疯狂。但是,如果他们付钱做这件事,那么......呃,无论如何。

如果您使用的是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 .... }
    

希望有所帮助。