如何使用 JavaScript 检测 Internet Explorer (IE) 和 Microsoft Edge?
How can I detect Internet Explorer (IE) and Microsoft Edge using JavaScript?
我看了很多地方,我知道有很多方法可以检测 Internet Explorer。
我的问题是:我的 HTML 文档中有一个区域,单击该区域时会调用与任何类型的 Internet Explorer 都不兼容的 JavaScript 函数。
我想检测是否正在使用IE,如果是,则将变量设置为true。
问题是,我正在用 Notepad++ 编写代码,当我在浏览器中 运行 HTML 代码时,none 检测 IE 的方法有效。我认为问题在于我 运行 从 Notepad++ 中删除它。我需要能够检测 IE,以便基于变量,我可以禁用站点的那个区域。我试过这个:
var isIE10 = false;
if (navigator.userAgent.indexOf("MSIE 10") > -1) {
// this is internet explorer 10
isIE10 = true;
window.alert(isIE10);
}
var isIE = (navigator.userAgent.indexOf("MSIE") != -1);
if(isIE){
if(!isIE10){
window.location = 'pages/core/ie.htm';
}
}
但它不起作用。如何从 Notepad++ 中检测到 IE?这就是我正在测试 HTML 的原因,但我需要一种方法来处理它。
编辑
我注意到有人将其标记为重复,这是可以理解的。我想我不清楚。我不能使用 JQuery 答案,所以这不是重复的,因为我要求的是普通 JS 答案。
编辑#2
是否还有检测 Microsoft Edge 浏览器的方法?
这是我所知道的最新正确的IE和Edge检测方法:
if (/MSIE 10/i.test(navigator.userAgent)) {
// This is internet explorer 10
window.alert('isIE10');
}
if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
// This is internet explorer 9 or 11
window.location = 'pages/core/ie.htm';
}
if (/Edge\/\d./i.test(navigator.userAgent)){
// This is Microsoft Edge
window.alert('Microsoft Edge');
}
请注意,您的代码中不需要额外的 isIE10 变量,因为它现在会执行非常具体的检查。
另请查看此页面以获取最新的 IE 和 Edge 用户代理字符串,因为此答案有时可能会过时:https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx
首先肯定不是Notepad++的问题。
这是你的“字符串匹配问题”
所有IE版本的通用字符串是MSIE
在 http://www.useragentstring.com/pages/Internet%20Explorer/
查看各种 userAgent 字符串
if(navigator.userAgent.indexOf("MSIE") != -1){
alert('I am Internet Explorer!!');
}
我不知道为什么,但我没有像其他人所说的那样在 userAgent 中看到 "Edge",所以我不得不采取另一条可能对某些人有所帮助的途径。
我没有看 navigator.userAgent,而是看 navigator.appName 来区分它是 IE<=10 还是 IE11 和 Edge。 IE11 和 Edge 使用 "Netscape" 的 appName,而其他所有迭代都使用 "Microsoft Internet Explorer"。
在我们确定浏览器是 IE11 或 Edge 之后,我又查看了 navigator.appVersion。我注意到在 IE11 中,字符串很长,里面有很多信息。随便挑出来的"Trident"这个词,绝对不在Edge的navigator.appVersion里面。测试这个词让我区分了两者。
下面的函数将 return 用户使用的 Internet Explorer 的数值。如果在 Microsoft Edge 上,它 return 是数字 12。
祝你好运,希望对你有所帮助!
function Check_Version(){
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer'){
var ua = navigator.userAgent,
re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) !== null){
rv = parseFloat( RegExp. );
}
}
else if(navigator.appName == "Netscape"){
/// in IE 11 the navigator.appVersion says 'trident'
/// in Edge the navigator.appVersion does not say trident
if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
else rv = 11;
}
return rv;
}
我正在使用 UAParser
https://github.com/faisalman/ua-parser-js
var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;
主题有点旧,但由于此处的脚本将 Firefox 检测为误报 (EDGE v12),因此这是我使用的版本:
function isIEorEDGE(){
if (navigator.appName == 'Microsoft Internet Explorer'){
return true; // IE
}
else if(navigator.appName == "Netscape"){
return navigator.userAgent.indexOf('.NET') > -1; // Only Edge uses .NET libraries
}
return false;
}
当然可以写得更简洁:
function isIEorEDGE(){
return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.userAgent.indexOf('.NET') > -1);
}
使用这个片段:var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;
这里有一个javascriptclass可以检测IE10、IE11和Edge。
Navigator 对象被注入用于测试目的。
var DeviceHelper = function (_navigator) {
this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
if(!this.navigator.userAgent) {
return false;
}
var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
return IE10 || IE11;
};
DeviceHelper.prototype.isEdge = function() {
return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};
DeviceHelper.prototype.isMicrosoftBrowser = function() {
return this.isEdge() || this.isIE();
};
对我来说更好:
var uA = window.navigator.userAgent,
onlyIEorEdge = /msie\s|trident\/|edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
开始 运行: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/
如果你只是想给使用 MS 浏览器的用户一个警告什么的,这段代码应该不错。
HTML:
<p id="IE">You are not using a microsoft browser</p>
Javascript:
using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);
if (using_ms_browser == true){
document.getElementById('IE').innerHTML = "You are using a MS browser"
}
感谢@GavinoGrifoni
这个功能非常适合我。它也检测边缘。
最初来自这个代码笔:
https://codepen.io/gapcode/pen/vEJNZN
/**
* detect IE
* returns version of IE or false, if browser is not Internet Explorer
*/
function detectIE() {
var ua = window.navigator.userAgent;
// Test values; Uncomment to check result …
// IE 10
// ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';
// IE 11
// ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';
// Edge 12 (Spartan)
// ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';
// Edge 13
// ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
var edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
return false;
}
然后您可以在代码中使用 if (detectIE()) { /* do IE stuff */ }
。
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
... do something
}
解释:
document.documentMode
仅限 IE 属性,首次在 IE8 中提供。
/Edge/
用于搜索字符串 'Edge' 的正则表达式 - 然后我们针对 'navigator.userAgent' 属性
进行测试
2020 年 3 月更新
@Jam 评论说最新版本的 Edge 现在将 Edg
报告为用户代理。所以检查将是:
if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) {
... do something
}
一行代码检测浏览器。
如果浏览器是IE或Edge,会return true;
let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)
如果我们需要检查 Edge,请继续执行此操作
if(navigator.userAgent.indexOf("Edge") > 1 ){
//do something
}
我看了很多地方,我知道有很多方法可以检测 Internet Explorer。
我的问题是:我的 HTML 文档中有一个区域,单击该区域时会调用与任何类型的 Internet Explorer 都不兼容的 JavaScript 函数。 我想检测是否正在使用IE,如果是,则将变量设置为true。
问题是,我正在用 Notepad++ 编写代码,当我在浏览器中 运行 HTML 代码时,none 检测 IE 的方法有效。我认为问题在于我 运行 从 Notepad++ 中删除它。我需要能够检测 IE,以便基于变量,我可以禁用站点的那个区域。我试过这个:
var isIE10 = false;
if (navigator.userAgent.indexOf("MSIE 10") > -1) {
// this is internet explorer 10
isIE10 = true;
window.alert(isIE10);
}
var isIE = (navigator.userAgent.indexOf("MSIE") != -1);
if(isIE){
if(!isIE10){
window.location = 'pages/core/ie.htm';
}
}
但它不起作用。如何从 Notepad++ 中检测到 IE?这就是我正在测试 HTML 的原因,但我需要一种方法来处理它。
编辑
我注意到有人将其标记为重复,这是可以理解的。我想我不清楚。我不能使用 JQuery 答案,所以这不是重复的,因为我要求的是普通 JS 答案。
编辑#2
是否还有检测 Microsoft Edge 浏览器的方法?
这是我所知道的最新正确的IE和Edge检测方法:
if (/MSIE 10/i.test(navigator.userAgent)) {
// This is internet explorer 10
window.alert('isIE10');
}
if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
// This is internet explorer 9 or 11
window.location = 'pages/core/ie.htm';
}
if (/Edge\/\d./i.test(navigator.userAgent)){
// This is Microsoft Edge
window.alert('Microsoft Edge');
}
请注意,您的代码中不需要额外的 isIE10 变量,因为它现在会执行非常具体的检查。
另请查看此页面以获取最新的 IE 和 Edge 用户代理字符串,因为此答案有时可能会过时:https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx
首先肯定不是Notepad++的问题。 这是你的“字符串匹配问题”
所有IE版本的通用字符串是MSIE 在 http://www.useragentstring.com/pages/Internet%20Explorer/
查看各种 userAgent 字符串if(navigator.userAgent.indexOf("MSIE") != -1){
alert('I am Internet Explorer!!');
}
我不知道为什么,但我没有像其他人所说的那样在 userAgent 中看到 "Edge",所以我不得不采取另一条可能对某些人有所帮助的途径。
我没有看 navigator.userAgent,而是看 navigator.appName 来区分它是 IE<=10 还是 IE11 和 Edge。 IE11 和 Edge 使用 "Netscape" 的 appName,而其他所有迭代都使用 "Microsoft Internet Explorer"。
在我们确定浏览器是 IE11 或 Edge 之后,我又查看了 navigator.appVersion。我注意到在 IE11 中,字符串很长,里面有很多信息。随便挑出来的"Trident"这个词,绝对不在Edge的navigator.appVersion里面。测试这个词让我区分了两者。
下面的函数将 return 用户使用的 Internet Explorer 的数值。如果在 Microsoft Edge 上,它 return 是数字 12。
祝你好运,希望对你有所帮助!
function Check_Version(){
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer'){
var ua = navigator.userAgent,
re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) !== null){
rv = parseFloat( RegExp. );
}
}
else if(navigator.appName == "Netscape"){
/// in IE 11 the navigator.appVersion says 'trident'
/// in Edge the navigator.appVersion does not say trident
if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
else rv = 11;
}
return rv;
}
我正在使用 UAParser https://github.com/faisalman/ua-parser-js
var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;
主题有点旧,但由于此处的脚本将 Firefox 检测为误报 (EDGE v12),因此这是我使用的版本:
function isIEorEDGE(){
if (navigator.appName == 'Microsoft Internet Explorer'){
return true; // IE
}
else if(navigator.appName == "Netscape"){
return navigator.userAgent.indexOf('.NET') > -1; // Only Edge uses .NET libraries
}
return false;
}
当然可以写得更简洁:
function isIEorEDGE(){
return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.userAgent.indexOf('.NET') > -1);
}
使用这个片段:var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;
这里有一个javascriptclass可以检测IE10、IE11和Edge。
Navigator 对象被注入用于测试目的。
var DeviceHelper = function (_navigator) {
this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
if(!this.navigator.userAgent) {
return false;
}
var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
return IE10 || IE11;
};
DeviceHelper.prototype.isEdge = function() {
return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};
DeviceHelper.prototype.isMicrosoftBrowser = function() {
return this.isEdge() || this.isIE();
};
对我来说更好:
var uA = window.navigator.userAgent,
onlyIEorEdge = /msie\s|trident\/|edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
checkVersion = (onlyIEorEdge && +(/(edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
开始 运行: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/
如果你只是想给使用 MS 浏览器的用户一个警告什么的,这段代码应该不错。
HTML:
<p id="IE">You are not using a microsoft browser</p>
Javascript:
using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);
if (using_ms_browser == true){
document.getElementById('IE').innerHTML = "You are using a MS browser"
}
感谢@GavinoGrifoni
这个功能非常适合我。它也检测边缘。
最初来自这个代码笔:
https://codepen.io/gapcode/pen/vEJNZN
/**
* detect IE
* returns version of IE or false, if browser is not Internet Explorer
*/
function detectIE() {
var ua = window.navigator.userAgent;
// Test values; Uncomment to check result …
// IE 10
// ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';
// IE 11
// ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';
// Edge 12 (Spartan)
// ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';
// Edge 13
// ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
var edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
}
// other browser
return false;
}
然后您可以在代码中使用 if (detectIE()) { /* do IE stuff */ }
。
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
... do something
}
解释:
document.documentMode
仅限 IE 属性,首次在 IE8 中提供。
/Edge/
用于搜索字符串 'Edge' 的正则表达式 - 然后我们针对 'navigator.userAgent' 属性
进行测试2020 年 3 月更新
@Jam 评论说最新版本的 Edge 现在将 Edg
报告为用户代理。所以检查将是:
if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) {
... do something
}
一行代码检测浏览器。
如果浏览器是IE或Edge,会return true;
let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)
如果我们需要检查 Edge,请继续执行此操作
if(navigator.userAgent.indexOf("Edge") > 1 ){
//do something
}