blo*_*ong 14 javascript internet-explorer browser-detection
阻止IE绝对不是最佳实践,但它符合我对现有应用程序的要求.最有效的方法是什么,因为IE 10 中没有条件注释?对于IE 9及更低版本,这将起作用:
<!--[if IE]>
<script type="text/javascript">
window.location = "/IEblocked.html";
</script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
假设有一个最佳实践JavaScript解决方案,有什么陷阱我可以找到?我想知道是否存在以下问题:
iframe 我无法控制的元素<script>标记的上下文中优先使用JS解决方案document.write('<script type="text/javascript" src="foo.js"></script>');方法加载.我有一种感觉,很多人可能会被迫大喊"使用Modernizr"和"你疯了吗,不要把DOM放在DOM中!" 不幸的是,应用程序很大,此时一些增强功能超出了范围.
Sha*_*ard 16
嗯,IE是唯一支持客户端VBScript的浏览器.
所以只需将其添加到您的页面:(当然,除了IEblocked.html本身)
<script type="text/vbscript">
Document.Location = "IEblocked.html"
</script>
Run Code Online (Sandbox Code Playgroud)
我知道它在IE9及以下版本中工作.这条评论几乎证明它在IE10中仍然运行良好,至于未来我遇到了Eric Lippert的这篇博客文章:VBScript死亡的谣言被夸大了,其中包含以下段落:
在可预见的未来,我们将继续支持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愚蠢地放弃对它的支持.支持非常便宜,即使少数客户失去良好的意愿也是昂贵的.
他不再在微软工作,所以他的答案不是正式的,但它是我能得到的最接近的,而不是几年前的博客文章,而是直接来自消息来源.考虑到所有因素,我可以得出结论,使用上述代码将会在未来的许多年内发挥作用.:)
您的客户很疯狂。但是,如果他们为此付费,那么……。
如果您使用的是jQuery,它将提供浏览器检测功能。它已被弃用,因此您可能要避免使用最新版本,但它确实可以工作:
if ($.browser.msie) { ....do crazy stuff here.... }
Run Code Online (Sandbox Code Playgroud)
如果您不使用jQuery,或者不想使用不推荐使用的功能,则可以通过以下方法实现:
解析用户代理字符串:
if(!!navigator.userAgent.match(/MSIE/)) { .... do crazy stuff .... }
Run Code Online (Sandbox Code Playgroud)使用Javascript条件注释(我相信仍然支持):
if(Function('/*@cc_on return document.documentMode > 0@*/')()){ .... do crazy stuff .... }
Run Code Online (Sandbox Code Playgroud)希望能有所帮助。