Nhận phiên bản IE từ Tác nhân người dùng
var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}
Cách hoạt động: Chuỗi user-agent cho tất cả các phiên bản IE bao gồm một phần "MSIE không gian phiên bản " hoặc "Trident khác văn rv không gian-hoặc-ruột phiên bản ". Biết điều này, chúng tôi lấy số phiên bản từ một String.match()
biểu thức thông thường. Một try-catch
khối được sử dụng để rút ngắn mã, nếu không, chúng ta cần kiểm tra giới hạn mảng cho các trình duyệt không phải IE.
Lưu ý: Tác nhân người dùng có thể bị giả mạo hoặc bỏ qua, đôi khi vô tình nếu người dùng đã đặt trình duyệt của họ thành "chế độ tương thích". Mặc dù điều này dường như không phải là một vấn đề trong thực tế.
Nhận phiên bản IE mà không có tác nhân người dùng
var d = document, w = window;
var ie = ( !!w.MSInputMethodContext ? 11 : !d.all ? 99 : w.atob ? 10 :
d.addEventListener ? 9 : d.querySelector ? 8 : w.XMLHttpRequest ? 7 :
d.compatMode ? 6 : w.attachEvent ? 5 : 1 );
Cách thức hoạt động: Mỗi phiên bản IE thêm hỗ trợ cho các tính năng bổ sung không có trong các phiên bản trước. Vì vậy, chúng tôi có thể kiểm tra các tính năng theo cách từ trên xuống. Một chuỗi ternary được sử dụng ở đây để ngắn gọn, if-then
và các switch
câu lệnh cũng sẽ hoạt động tốt. Biến ie
được đặt thành số nguyên 5-11 hoặc 1 cho cũ hơn hoặc 99 cho mới hơn / không phải IE. Bạn có thể đặt thành 0 nếu bạn chỉ muốn kiểm tra IE 1-11 chính xác.
Lưu ý: Phát hiện đối tượng có thể bị hỏng nếu mã của bạn được chạy trên một trang có tập lệnh của bên thứ ba có thêm polyfill cho những thứ như document.addEventListener
. Trong những tình huống như vậy, tác nhân người dùng là lựa chọn tốt nhất.
Phát hiện nếu Trình duyệt hiện đại
Nếu bạn chỉ quan tâm đến việc trình duyệt có hỗ trợ hầu hết các tiêu chuẩn HTML 5 và CSS 3 hay không, bạn có thể giả định một cách hợp lý rằng IE 8 trở xuống vẫn là các ứng dụng vấn đề chính. Việc thử nghiệm window.getComputedStyle
cũng sẽ cung cấp cho bạn một kết hợp khá tốt các trình duyệt hiện đại (IE 9, FF 4, Chrome 11, Safari 5, Opera 11.5). IE 9 cải thiện đáng kể về hỗ trợ tiêu chuẩn, nhưng hoạt hình CSS gốc yêu cầu IE 10.
var isModernBrowser = ( !document.all || ( document.all && document.addEventListener ) );