Làm cách nào để phát hiện Internet Explorer (IE) và Microsoft Edge bằng JavaScript?


81

Tôi đã xem xét xung quanh rất nhiều và tôi hiểu rằng có rất nhiều cách để phát hiện trình khám phá internet.

Vấn đề của tôi là thế này: Tôi có một vùng trên tài liệu HTML của mình mà khi được nhấp vào, nó sẽ gọi hàm JavaScript không tương thích với bất kỳ loại trình khám phá internet nào. Tôi muốn phát hiện xem IE có đang được sử dụng hay không và nếu có, hãy đặt biến thành true.

Vấn đề là, tôi đang viết mã của mình từ Notepad ++ và khi tôi chạy mã HTML trong trình duyệt, không có phương pháp nào để phát hiện IE hoạt động. Tôi nghĩ rằng vấn đề là tôi đang chạy nó khỏi Notepad ++. Tôi cần có khả năng phát hiện IE, để dựa trên biến, tôi có thể vô hiệu hóa khu vực đó của trang web. Tôi đã thử điều này:

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';
    }
}

nhưng nó không hoạt động. Làm cách nào để phát hiện IE ra khỏi Notepad ++? Đó là những gì tôi đang thử nghiệm HTML, nhưng tôi cần một phương pháp sẽ hoạt động với điều đó.

biên tập

Tôi nhận thấy ai đó đã đánh dấu điều này là trùng lặp và điều đó có thể hiểu được. Tôi cho rằng tôi đã không rõ ràng. Tôi không thể sử dụng câu trả lời JQuery, vì vậy đây không phải là bản sao vì tôi đang yêu cầu câu trả lời vani JS.

Chỉnh sửa # 2

Có cách nào để phát hiện trình duyệt Microsoft Edge không?


2
Bạn sẽ dễ dàng hơn nhiều khi làm cho mã hoạt động trên IE và các trình duyệt khác thay vì viết mã cụ thể của IE.
Ibu

1
Nếu bạn không thể chỉ sửa chức năng của mình để hoạt động trong IE, thì phát hiện tính năng được hầu hết mọi người coi là một cách viết mã tốt hơn nhiều so với phát hiện trình duyệt. Thêm vào đó, khả năng tương thích chuyển tiếp tốt hơn nhiều khi trình duyệt thay đổi. Ví dụ, bạn đã biết mình muốn làm gì với Edge, trình duyệt mới nhất của Microsoft.
jfriend00

1
có thể trùng lặp của jQuery: kiểm tra nếu người dùng đang sử dụng trình duyệt IE kiểm tra liên kết, có rất nhiều giải pháp
num8er

Nếu một trong những câu trả lời bên dưới trả lời câu hỏi của bạn, cách trang web này hoạt động, bạn "chấp nhận" câu trả lời, thêm ở đây: Tôi nên làm gì khi ai đó trả lời câu hỏi của tôi ?. Nhưng chỉ khi câu hỏi của bạn thực sự đã được trả lời. Nếu không, hãy xem xét thêm các chi tiết khác vào câu hỏi.
baao

Đã thêm tính năng phát hiện cạnh vào câu trả lời của tôi và cũng là một liên kết tiện dụng để bạn có thể xem các phiên bản mới nhất.
Skeptic

Câu trả lời:


31

Tôi không biết tại sao, nhưng tôi không thấy "Edge" trong userAgent như mọi người đang nói về nó, vì vậy tôi đã phải chọn một con đường khác có thể giúp ích cho một số người.

Thay vì nhìn vào Navigator.userAgent, tôi nhìn vào Navigator.appName để phân biệt đó là IE <= 10 hay IE11 và Edge. IE11 và Edge sử dụng appName của "Netscape", trong khi mọi phiên bản khác sử dụng "Microsoft Internet Explorer".

Sau khi chúng tôi xác định rằng trình duyệt đó là IE11 hoặc Edge, sau đó tôi tìm đến Navigator.appVersion. Tôi nhận thấy rằng trong IE11, chuỗi khá dài với rất nhiều thông tin bên trong nó. Tôi đã tự ý chọn từ "Trident", từ này chắc chắn không có trong Navigator.appVersion dành cho Edge. Thử nghiệm cho từ này cho phép tôi phân biệt hai.

Dưới đây là một hàm sẽ trả về một giá trị số mà người dùng đang sử dụng Internet Explorer. Nếu trên Microsoft Edge, nó trả về số 12.

Chúc may mắn và tôi hy vọng điều này sẽ giúp ích!

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.$1 );
       }
    }
    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;          
}

7
Điều này đang trả về 12 trong cả edge và firefox.
edencorbin

@edencorbin Tôi đã đăng một câu trả lời bên dưới để giải quyết vấn đề này. stackoverflow.com/a/36688806/2304450
GavinoGrifoni

4
Điều này không hoạt động. Trong Chrome, Opera, Firefox và (có thể) Safari navigator.appName == "Netscape"đánh giá là true.
Jack Giffin

2
NHƯ TRÊN. Không thành công trên Chrome, Opera, Firefox, Safari
BBaysinger

91

Đây là cách chính xác mới nhất mà tôi biết về cách kiểm tra IE và 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');
}

Lưu ý rằng bạn không cần thêm var isIE10 trong mã của mình vì nó hiện kiểm tra rất cụ thể.

Ngoài ra, hãy xem trang này để biết chuỗi tác nhân người dùng IE và Edge mới nhất vì câu trả lời này có thể trở nên lỗi thời vào một thời điểm nào đó: https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29. aspx


2
FWIW, khi tôi kiểm tra navigator.userAgentWin10 / Edge VM, tôi chỉ nhận được phần đầu tiên của nó, không bao gồm "Edge"chuỗi.
Dave Newton

1
Bạn đang sử dụng phiên bản Edge nào và bạn có thể đăng nó ở đây không?
Skeptic

Tôi đang sử dụng VirtualBox 5.0.2 r 102096 và hình ảnh có tên là Microsoft Edge.Win10.For.Mac.VirtualBox.zip được tải xuống từ trang web MS vào Thứ Hai ngày 27 tháng 8 năm 2015. Hình nền màn hình hiển thị Build 10240 , trang chủ Edge cho biết tôi đang sử dụng "bản dựng mới nhất của máy ảo này, 20150801 ", được hiển thị trong Cài đặt là 20.10240.16384.0 .
Dave Newton

Cảm ơn và chuỗi Navigator.userAgent?
Skeptic

1
Nó được trả về là "Mozilla / 5.0 (Windows NT 10.0; Win64; x64)" thay vì chuỗi đầy đủ. IIRC Tôi đã tìm thấy một câu hỏi SO khác liên quan đến vấn đề VM / hình ảnh.
Dave Newton

36
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
    ... do something
}

Giải trình:

document.documentMode

Thuộc tính chỉ dành cho IE, lần đầu tiên có trong IE8.

/Edge/

Một biểu thức chính quy để tìm kiếm chuỗi 'Edge' - sau đó chúng tôi kiểm tra với thuộc tính 'navigation.userAgent'

Cập nhật tháng 3 năm 2020

@Jam nhận xét rằng phiên bản Edge mới nhất hiện báo cáo Edglà tác nhân người dùng. Vì vậy, séc sẽ là:

if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) {
    ... do something
}

2
Đây là trang duy nhất trong số này làm việc cho tôi cả trên IE và Edge.
Meloman

1
/Edge\//.test(navigator.userAgent) Để mạnh mẽ hơn, tôi muốn bao gồm dấu gạch chéo ngược.
jj

1
Trong phiên bản Edge mới nhất, nó chỉ là Edg trong tác nhân người dùng. Vì vậy, để kiểm tra IE, Edge và Edge chromium, và bao gồm cả dấu gạch chéo:document.documentMode || /Edge\//.test(navigator.userAgent) || /Edg\//.test(navigator.userAgent)
Jam

Tôi cho rằng bạn không cần phát hiện Edge bằng chuỗi UA "Edg", vì nó dựa trên Chromium và có thể không muốn bị phát hiện (trái ngược với EdgeHTML)
Andrey

15

Tôi đang sử dụng UAParser https://github.com/faisalman/ua-parser-js

var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;

2
Nói chung, phát hiện tính năng tốt hơn phát hiện trình duyệt. Điều đó nói rằng, nếu bạn thực sự cần phát hiện một trình duyệt, tôi sẽ sử dụng một thư viện (như được đề xuất ở đây). Có rất nhiều phức tạp để phân tích chuỗi tác nhân người dùng, một thư viện sẽ giảm nguy cơ mắc lỗi.
sandstrom

Rất hữu ích, không có giải pháp nào khác hoạt động, plugin này hoạt động hoàn hảo đối với tôi.
edencorbin

11

Chủ đề hơi cũ, nhưng vì các tập lệnh ở đây phát hiện Firefox là Dương tính giả (EDGE v12), đây là phiên bản tôi sử dụng:

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;
}

tất nhiên có thể được viết theo cách ngắn gọn hơn:

function isIEorEDGE(){
  return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.userAgent.indexOf('.NET') > -1);
}

trả về false cho cạnh
whipped cream Airplane

@CreamWhippedAirplane, bạn có thể đăng kết quả của Navigator.appName được cung cấp bởi phiên bản Edge của bạn ở đây không? Có lẽ họ đã thay đổi nó gần đây
GavinoGrifoni

@CreamWhippedAirplane dường như họ đã thay đổi navigator.appVersion: bây giờ nó không còn chứa "Trident" nữa mà thay vào đó họ thêm "Edge" vào tên một cách chính xác. Cập nhật câu trả lời của tôi ngay bây giờ!
GavinoGrifoni,

Điều này không hiệu quả với tôi khi thử nghiệm trên browserstack.com, tôi không biết liệu nó có hoạt động trên máy thật hay không! Nhưng trên browserstack tôi Netscapenhư AppName ...
Betty St

4
Không cho IE 11. IE 11 cho chỉ 'Netscape' như appname điều kiện như vậy, không những
Ankur Aggarwal

8

Chức năng này hoạt động hoàn hảo đối với tôi. Nó cũng phát hiện Edge.

Ban đầu từ Codepen này:

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;
}

Sau đó, bạn có thể sử dụng if (detectIE()) { /* do IE stuff */ }trong mã của mình.


Điều này đã hiệu quả với tôi vào năm 2019. Các giải pháp khác trên trang này cho kết quả dương tính giả với Firefox hoặc thậm chí âm tính giả cho IE 11.
Melissa Freeman

6

Nếu bạn chỉ muốn cung cấp cho người dùng sử dụng trình duyệt MS một cảnh báo hoặc điều gì đó, thì mã này phải tốt.

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"
}

Cảm ơn @GavinoGrifoni



2

Sử dụng đoạn này: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;


3
Điều này làm việc tốt nhất cho tôi, mặc dù op ternary là dư thừa. navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1đánh giá đúng hoặc sai để bạn có thể trả lại / sử dụng nó.
Kolby

2

Một mã dòng để phát hiện trình duyệt.

Nếu trình duyệt là IE hoặc Edge, Nó sẽ trả về true;

let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)

0

Đây là một lớp javascript phát hiện IE10, IE11 và Edge.
Đối tượng điều hướng được đưa vào cho các mục đích thử nghiệm.

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();
};

0

Nếu chúng tôi cần kiểm tra Edge, vui lòng bắt đầu với điều này

if (Navigator.userAgent.indexOf ("Edge")> 1) {

//do something

}


-4

Trước hết, nó không phải là vấn đề Notepad ++ chắc chắn. Nó bạn " vấn đề Matching Chuỗi "

Chuỗi chung trong tất cả các phiên bản IE là MSIE Kiểm tra các chuỗi userAgent khác nhau tại http://www.useragentstring.com/pages/Internet%20Explorer/

if(navigator.userAgent.indexOf("MSIE") != -1){
   alert('I am Internet Explorer!!');
}

đã thử điều này, nó không hoạt động. tôi đã chạy mã từ notepad ++ trong IE và không có cảnh báo nào. Tôi đã kiểm tra bảng điều khiển trình gỡ lỗi và không có lỗi. Tôi đang chạy Windows 7, không chắc chắn nếu có ảnh hưởng đến phiên bản của trình duyệt IE

Phiên bản IE bạn đang sử dụng là gì?
Amit Prabhu Parrikar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.