Làm cách nào để phát hiện IE 8 bằng jQuery?


102

Tôi không chỉ cần phát hiện loại trình duyệt mà còn cả phiên bản đang sử dụng jQuery. Chủ yếu là tôi cần tìm hiểu xem nó có phải là IE 8 hay không.

Tôi không chắc liệu mình có đang làm đúng hay không.

Nếu tôi làm :

if (jQuery.browser.version >= 8.0) {
dosomething}

Tôi không chắc nó sẽ hoạt động cho phiên bản 8.123.45.6 hay sẽ hoạt động?

Chỉnh sửa: Lưu ý rằng JQuery 2+ đã bỏ hỗ trợ cho IE8 trở xuống, và do đó không còn có thể được sử dụng để phát hiện IE8. Nếu sử dụng phiên bản JQuery hiện tại, cần sử dụng giải pháp Không phải JQuery.


11
các câu trả lời được đề xuất bên dưới đề xuất bạn sử dụng jQuery.browser. Tuy nhiên, tài liệu jQuery không dùng jQuery.browser nữa. Thay vào đó, họ khuyên bạn nên sử dụng jQuery.support và trỏ đến một tính năng không được hỗ trợ để gắn cờ trình duyệt. Ví dụ: bạn có thể sử dụng if (jQuery.support.opacity == false) {mã IE8 và IE7 của bạn}
IberoMedia 23/09/12

Điều này jquery.support.opacitychỉ làm những gì tôi muốn. Cảm ơn ...
nrod


Nếu bạn đang làm mọi thứ đúng cách, bạn hầu như không cần phải phát hiện phiên bản trình duyệt. Có một lý do khiến tính năng này bị xóa khỏi jQuery và lý do đó là việc phát hiện phiên bản trình duyệt là một hoạt động không tốt. Sử dụng tính năng phát hiện thay thế sẽ giải quyết được vấn đề trong hầu hết các trường hợp.
Spudley

2
Tôi cần phát hiện IE8 vì đây là trình duyệt duy nhất có công cụ javascript chậm đến mức nó hiển thị hộp thoại cho biết "bạn có muốn dừng chạy tập lệnh không" trên trang này và mặc định là "có". Nếu có một cơ chế phát hiện tính năng cho việc này, tôi sẽ sử dụng nó. Nếu không, đó là nếu trình duyệt == IE8. Tôi không thể tối ưu hóa javascript, bởi vì mã treeview riêng của nó Kendo của gây ra nó
PandaWood

Câu trả lời:


79

Nó được ghi lại trong Tài liệu API jQuery . Kiểm tra Internet Explorer với $.browser.msievà sau đó kiểm tra phiên bản của nó với $.browser.version.

CẬP NHẬT: Đã xóa $ .browser trong jQuery 1.9

Phương thức jQuery.browser () không được dùng nữa kể từ jQuery 1.3 và bị loại bỏ trong 1.9. Nếu cần, nó có sẵn như một phần của plugin jQuery Migrate. Chúng tôi khuyên bạn nên sử dụng tính năng phát hiện với một thư viện như Modernizr.


if I do: if (jQuery.browser.version> = 8.0) {dosomething} Tôi không chắc nó sẽ hoạt động cho phiên bản 8.123.45.6 hay sẽ hoạt động?
salmane

13
Nó là một chuỗi, vì vậy bạn nên làm if(jQuery.browser.version.substring(0, 2) == "8.") { ... }. Bằng cách đó, nó sẽ hoạt động với tất cả các phiên bản của IE8.
AndiDog

13
jQuery.browserđã không còn được dùng trong phiên bản 1.3 và có thể được chuyển sang một plugin trong tương lai. Xem tài liệu jQuery.browser
bentytree

Rất may ITT vẫn xung quanh và không có đề cập đến deprecation, @bendytree
Alastair

47
jquery.browser bị gỡ bỏ trong 1.9
Mandeep Jain

173

Tôi nghĩ cách tốt nhất sẽ là:

Từ bảng soạn thảo HTML5:

<!--[if lt IE 7]> <html lang="en-us" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en-us" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->

trong JS:

if( $("html").hasClass("ie8") ) { /* do your things */ };

đặc biệt là kể từ $.browser đã bị xóa khỏi jQuery 1.9+.


11
Đây là một cách rất thông minh để phát hiện phiên bản IE. Tôi thích rất nhiều!
Greg

nhưng không làm việc nếu trang web của bạn được phân phối với 'Content-type: application / xhtml + xml' header, hơn những ý kiến có điều kiện được bỏ qua
Philipp

1
Rất thông minh ... nhưng cần lưu ý rằng bạn cần kiểm tra các lớp hiện tại được thêm bởi các điều kiện trong HTML5BP. Tại thời điểm này tôi nghĩ rằng đó là lớp lt-ie9AOTie8
byronyasgur

2
@meo Tôi cũng thích cách triển khai này. Nhưng có một lý do tại sao lớp được gắn vào <html>thay vì <body>?
nghỉ ngơi

@meo Thật thú vị. Cảm ơn.
nghỉ

89

Điều này sẽ hoạt động cho tất cả các phiên bản nhỏ của IE8

if ($.browser.msie  && parseInt($.browser.version, 10) === 8) {
  alert('IE8'); 
} else {
  alert('Non IE8');
}

- cập nhật

Xin lưu ý rằng $ .browser được lấy ra từ jQuery 1.9


56

Đừng quên rằng bạn cũng có thể sử dụng HTML để phát hiện IE8.

<!--[if IE 8]>
<script type="text/javascript">
    ie = 8;
</script>
<![endif]-->

Có điều đó trước tất cả các tập lệnh của bạn sẽ cho phép bạn chỉ cần kiểm tra biến "ie" hoặc bất cứ điều gì.


4
Cú pháp này cũng hỗ trợ các bộ so sánh "nhỏ hơn" ("[nếu lt IE 7]") và "lớn hơn" ("[nếu gt IE 8]").
spiffytech

1
<! - [if lte IE 8]> để bao gồm ie8
user227353

1
Đây là cách tốt nhất để làm điều đó, chỉ cần chuyển hướng đến một trang khác có nội dung "Tại sao bạn sử dụng IE8?" NÂNG CẤP NGAY BÂY GIỜ!
Leon Gaban

2
Theo tiêu chuẩn ngày nay, tôi sẽ hỏi họ tại sao họ lại sử dụng IE.
TheBuzzSaw

Đây có vẻ là giải pháp tốt nhất hiện nay vì JQuery 2.1.1 không hoạt động với IE8 và do đó không thể được sử dụng để phát hiện IE8!
Dave

27

document.documentMode không được xác định nếu trình duyệt không phải là IE8,

nó trả về 8 cho chế độ tiêu chuẩn và 7 cho chế độ 'tương thích với IE7'

Nếu nó đang chạy như IE7, có rất nhiều tính năng css và dom sẽ không được hỗ trợ.


9
Lưu ý rằng IE9 trả về 9. Tuy nhiên, đây sẽ là câu trả lời được bình chọn cao hơn, giờ đây $ .browser không còn là giải pháp tốt nữa. Hãy thử:if ((document.documentMode || 100) < 9) { // IE8
Don McCurdy

if (document.documentMode! == undefined && document.documentMode == 8) {...}
jpprade

Đối với một số ứng dụng mà IE8 vẫn còn được sử dụng nhiều - cụ thể là các trường học ở Hoa Kỳ - cách tiếp cận của @ Don McCurdy vừa đơn giản vừa hiệu quả. Song song với Modernizr, nó hoạt động tốt.
cbmtrx

Câu trả lời chính xác! Điều này trả về số phiên bản cho IE8 đến IE11 (so với IE5 đến IE9 cho các nhận xét có điều kiện - nếu ai đó vẫn cần phát hiện IE7 hoặc IE6 chính hãng, bạn sẽ cần sử dụng các nhận xét có điều kiện). Lưu ý rằng theo tài liệu, nó có thể trả lại 0trong khi trang đang tải - "hãy thử xác định chế độ tương thích của tài liệu vào thời điểm sau" (tức là sau khi tài liệu sẵn sàng).
user56reinstatemonica8

15

Giả định...

  • ... đó là công cụ kết xuất tồi tệ của các phiên bản IE cũ mà bạn muốn phát hiện, để tạo phong cách phù hợp với IE cũ (nếu không, hãy sử dụng tính năng phát hiện)
  • ... rằng bạn không thể chỉ thêm nhận xét có điều kiện vào HTML - ví dụ: đối với các plugin JS có thể được áp dụng cho bất kỳ trang nào (nếu không, chỉ cần thực hiện thủ thuật của các lớp có điều kiện trên <body>hoặc <html>)

... thì đây có lẽ là thủ thuật tốt nhất (dựa trên biến thể không phải jQuery, hơi kém linh hoạt này ). Nó tạo ra các bài kiểm tra sau đó để loại bỏ nhận xét có điều kiện thích hợp.

(Các nhận xét có điều kiện bị bỏ qua trong 'chế độ tiêu chuẩn' của IE10 + - nhưng điều đó sẽ ổn vì 'chế độ tiêu chuẩn' của IE10 + không có công cụ kết xuất điên rồ!)

Thả vào chức năng này:

function isIE( version, comparison ){
    var $div = $('<div style="display:none;"/>');

    // Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
    $div.appendTo($('body'));
    $div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a>&nbsp;</a><![endif]-->');

    var ieTest = $div.find('a').length;
    $div.remove();
    return ieTest;
}

Sau đó sử dụng nó như thế này:

if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }

if(isIE(8)){ /* runs in IE8 */ }

if(isIE(9)){ /* runs in IE9 */ }

if(isIE(8,'lte')){ /* runs in IE8 or below */ }

if(isIE(6,'lte')){ /* if you need this, I pity you... */ }

Tôi cũng khuyên bạn nên lưu vào bộ nhớ đệm các kết quả của hàm này để bạn không phải lặp lại nó. Ví dụ: bạn có thể sử dụng chuỗi ký tự (comparison||'')+' IE '+(version||'')làm khóa để lưu trữ và kiểm tra kết quả của bài kiểm tra này trong một đối tượng ở đâu đó.


9

Ghi chú:

1) $ .browser dường như bị loại bỏ trong jQuery 1.9+ (theo lưu ý của Mandeep Jain). Bạn nên sử dụng .support thay thế.

2) $ .browser.version có thể trả về "7" trong IE> 7 khi trình duyệt ở chế độ "tương thích".

3) Kể từ IE 10, các bình luận có điều kiện sẽ không còn hoạt động.

4) jQuery 2.0+ sẽ ngừng hỗ trợ cho IE 6/7/8

5) document.documentMode dường như được định nghĩa chỉ trong trình duyệt Internet Explorer 8+. Giá trị trả về sẽ cho bạn biết Internet Explorer đang chạy ở chế độ "tương thích" nào. Tuy nhiên, vẫn không phải là một giải pháp tốt.

Tôi đã thử nhiều tùy chọn .support (), nhưng có vẻ như khi trình duyệt IE (9+) ở chế độ tương thích, nó sẽ hoạt động giống như IE 7 ... :(

Cho đến nay tôi chỉ thấy điều này hoạt động (kind-a):

(nếu documentMode không được xác định và htmlSerialize và opacity không được hỗ trợ, thì rất có thể bạn đang xem IE <8 ...)

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}

5

Nếu bạn loay hoay với các phiên bản trình duyệt, nó thường không tốt. Bạn không muốn thực hiện nó một mình. Nhưng bạn có thể Modernizr được tạo ra bởi Paul Irish và những người thông minh khác. Nó sẽ phát hiện những gì trình duyệt thực sự có thể làm và đưa các lớp thích hợp vào <html>phần tử. Tuy nhiên với Modernizr , bạn có thể thử nghiệm phiên bản IE như sau:

$('html.lt-ie9').each() {
    // this will execute if browser is IE 8 or less
}

Tương tự, bạn có thể sử dụng .lt-ie8, và .lt-ie7.


3

Bạn cũng nên xem jQuery.support . Phát hiện tính năng đáng tin cậy hơn nhiều so với phát hiện trình duyệt để mã hóa chức năng của bạn (trừ khi bạn chỉ đang cố gắng ghi lại các phiên bản trình duyệt).


3
bạn sẽ sử dụng jQuery.support như thế nào để phát hiện IE8?
BishopZ

nếu AJAX là những gì bạn đang tìm kiếm thì bạn có thể sử dụng jQuery.support.ajax mà trả về true nếu trình duyệt hỗ trợ AJAX
Jonathan Lin

Câu trả lời này sẽ hữu ích: stackoverflow.com/questions/1944169/…
helgatheviking

3

Bạn có thể dễ dàng phát hiện loại và phiên bản của trình duyệt bằng cách sử dụng jquery này

$(document).ready(function()
{
 if ( $.browser.msie ){
    if($.browser.version == '6.0')
    {   $('html').addClass('ie6');
    }
    else if($.browser.version == '7.0')
    {   $('html').addClass('ie7');
    }
    else if($.browser.version == '8.0')
    {   $('html').addClass('ie8');
    }
    else if($.browser.version == '9.0')
    {   $('html').addClass('ie9');
    }
 }
 else if ( $.browser.webkit )
 { $('html').addClass('webkit');
 }
 else if ( $.browser.mozilla )
 { $('html').addClass('mozilla');
 }
 else if ( $.browser.opera )
 { $('html').addClass('opera');
 }
});

1

Đây là plugin phát hiện trình duyệt Jquery để xác định trình duyệt / phát hiện hệ điều hành.

Bạn có thể sử dụng nó cho mục đích tạo kiểu sau khi bao gồm plugin.

$("html").addClass($.os.name);
$("body").addClass($.browser.className);
$("body").addClass($.browser.name);

0

Bạn có thể sử dụng $ .browser để phát hiện tên trình duyệt. giá trị có thể là:

  • webkit (kể từ jQuery 1.4)
  • safari (không dùng nữa)
  • opera
  • msie
  • mozilla

hoặc nhận cờ boolean: $ .browser.msie sẽ đúng nếu trình duyệt là MSIE.

đối với số phiên bản, nếu bạn chỉ quan tâm đến số phát hành chính - bạn có thể sử dụng parseInt ($. browser.version, 10). không cần phải tự phân tích chuỗi $ .browser.version.

Dù sao, thuộc tính $ .support có sẵn để phát hiện hỗ trợ cho các tính năng cụ thể hơn là dựa vào $ .browser.

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.