阻止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>
标记document.write('<script type="text/javascript" src="foo.js"></script>');
方法加载的脚本。我有一种感觉很多人可能会被迫大声喊出“使用Modernizr”和“你疯了吗,不要把这些脚本放在DOM中!” / em>,遗憾的是应用程序很大,此时一些增强功能超出了范围。
答案 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 .... }
希望有所帮助。