如果浏览器不是IE,我想只包含一个JavaScript文件。有没有办法做到这一点?
如果浏览器不是IE,我想只包含一个JavaScript文件。有没有办法做到这一点?
更新2022年:
以下是一些选项:
让您的服务器查看 User-Agent
头并向Internet Explorer和其他浏览器发送不同的HTML。
优点:
缺点:
User-Agent
字符串容易出错,并且它们可能被欺骗或完全不存在。嗅探 navigator.userAgent
并根据您发现的内容输出一个 script
标记或不输出。
优点:
缺点:
User-Agent
字符串容易出错,并且它们可能被欺骗或完全不存在。script
标签有问题,特别是通过 document.write
,但根据您的用例,document.write
可能是不可避免的(例如,在某些其他脚本之前需要该脚本吗等)。嗅探JavaScript运行时中只有Internet Explorer具有的某些内容,并根据您发现的内容输出一个 script
标记或不输出。
优点:
缺点:
我可能会看一下第三个。例如,任何一个稍微现代一点的浏览器都有Symbol
函数。但是Internet Explorer没有。因此:
if (typeof Symbol !== "undefined") {
document.write("<script src='./your-non-ie-script.js'><\/script>");
// Or if you prefer
let script = document.createElement("script");
script.src = "./your-non-ie-script.js";
document.activeElement.parentNode.appendChild(script);
}
< p > Symbol
只是其中一个例子,IE 缺少 ES2015 中现在其他所有内容都有的 Reflect
、Proxy
和其他一些功能...
(不确定为什么我在2013年没有提到这一点!)
2013年更新: IE10及以上版本不再支持条件注释。
您可以使用IE的条件注释来实现,方法如下:
<![if !IE]>
<script src="your-non-IE-script.js" type="text/javascript"></script>
<![endif]>
<?processing-instruction-name-here ...data here...?>
。 - Eli Grey首先,需要注意的是:这并不是一个好的实践。如果可能的话,你应该努力以一种与浏览器无关的方式设计你的网站,这样它就可以在所有浏览器中一致地工作,而不需要为特定浏览器的问题维护各种技巧和hack。
但如果你真的想这么做,最简单的方法是只在IE浏览器下包含一个文件:
<!--[if lt IE 7]>
<script type="text/javascript" src="global.js"></script>
<![endif]-->
(仅在浏览器为IE6或更低版本时包括文件。)
然而,如果你真的想反过来做,这里有一些选择:
get_browser
函数。)browser
函数。)您可以使用IE条件注释。
如果您想在除IE之外的浏览器中显示某些内容,但在IE中不显示,并且仍然能够验证,则可以使用以下代码:
<!--[if !IE]>-->
<script src="..."></script>
<!--<![endif]-->
除了条件注释之外,还有一个不太为人知的IE功能叫做条件编译。可以参考http://msdn.microsoft.com/en-us/library/7kx09ct1%28VS.80%29.aspx
以下示例来自于它们的文档:
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
document.write("JScript Version 5.0 or better.<BR>");
@else @*/
document.write("You need a more recent script engine.<BR>");
/*@end @*/
你可以使用条件注释来完全不同的方式实现这一点(仅在IE中插入某些内容),也许这会对你有所帮助。
是的,IE的条件脚本就是你的答案:
<!--[if lt IE 7 ]>
<script src="/js/my_ie_script.js"></script>
<![endif]-->
怎么样把它转过来呢?如果这是可能的话,您可以使用IE的条件注释:http://www.quirksmode.org/css/condcom.html
否则,您可以嗅探用户代理,但这被认为是“不良实践”。
以下是一个在2022年可用的解决方案。
<html>
<head>
<script>
// Test if running in Internet Explorer or not
function isIE () {
var myNav = navigator.userAgent.toLowerCase();
return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
}
if (isIE()) {
var script = document.createElement('script');
script.src = "https://unpkg.com/core-js-bundle@3.6.5/minified.js";
document.head.appendChild(script);
}
</script>
</head>
<body>
</body>
</html>