2011-08-29 41 views
14

Tôi cần phát hiện xem người dùng đang chạy phiên bản cũ của IE (IE9 là tốt) từ một plugin jQuery, vì vậy tôi sẽ không có quyền kiểm soát HTML.Phát hiện các phiên bản IE cũ hơn

Chúng tôi đã không khuyến khích phân tích cú pháp chuỗi tác nhân người dùng và sử dụng $.browser.msie. Phương pháp $.support cũng không đề cập đến vấn đề.

Vì vậy, tôi đã tìm ra rằng công trình này, nhưng tôi không chắc đó có phải là "thực hành tốt" hay không.

$('body').append('<!--[if lte IE 8]><script>$("body").addClass("oldie");</script><![endif]-->'); 
var old_ie = $('body').is('.oldie'); 

Bạn có sử dụng phương pháp này hoặc phân tích cú pháp chuỗi tác nhân người dùng (tôi cần tìm hiểu xem đó là IE và nhận số phiên bản) không?

Trả lời

16

Bạn có thể chạy này

var ie = (function() { 
    var undef, v = 3, div = document.createElement('div'); 

    while (
     div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->', 
     div.getElementsByTagName('i')[0] 
    ); 

    return v > 4 ? v : undef; 
}()); 

để phát hiện các phiên bản của IE.

Nguồn:http://ajaxian.com/archives/attack-of-the-ie-conditional-comment

Và sau đó

if (ie < 9) { 
    // do your stuff, for instance: 
    window.location = 'http://getfirefox.com'; // :p 
} 
+0

LOL Tôi nên biết rằng James Padolsey đã tìm ra cách đây hơn một năm :) cảm ơn! – Mottie

+0

Tôi nhớ nhìn Rangy trước đây ... nhưng tôi nghĩ nó không hoạt động với textareas, có lẽ tôi cần phải nhìn lại nó một lần nữa kể từ khi một phiên bản mới ra mắt trong tháng này. Cảm ơn một lần nữa! – Mottie

2

Bạn đã không đề cập đến một cách rõ ràng trong câu hỏi của bạn tại sao bạn có một nhu cầu cụ thể để phát hiện cho IE9, vì vậy nói chung những lời khuyên sau đây giữ:

Thay vì phát hiện một trình duyệt/phiên bản cụ thể, bạn nên phát hiện các tính năng cụ thể. Modernizr là một nơi tốt để bắt đầu giúp đỡ về vấn đề này.

+0

Đôi khi, có những thứ IE không hỗ trợ bạn không thể sử dụng JavaScript để kiểm tra. Giống như công cụ CSS. –

+0

Các plugin tôi đang wortking trên cần phải vị trí các caret bên trong của một textarea ... IE9 dường như làm việc tốt mà không cần bất kỳ sửa đổi của caret, nhưng các phiên bản cũ chỉ không cư xử. – Mottie

+0

@fudgey Cân nhắc [Rangy] (http://code.google.com/p/rangy/) –

1

Làm thế nào về điều này:

if (!($.browser.msie && $.browser.version < 9.0)) { 
    // Apply only to IE8 and lower 
} 

Lưu ý rằng IE8 xuất hiện như IE7

+0

Tôi đang cố gắng tránh trình duyệt đánh hơi như được đề cập trong câu hỏi của tôi. – Mottie

+5

$ .browser không được chấp nhận từ 1.3 và bị xóa khỏi 1.9 –

+1

Tôi chỉ muốn người đọc trong tương lai biết rằng câu trả lời mà họ đang xem có thể không hoạt động ngay bây giờ/trong tương lai. Tôi không hiểu điểm của bạn thất vọng –

1

https://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx Xem liên kết ở trên, đây có thể là câu trả lời chính thức :) Tóm lại, mã sau trong html của bạn trang.

<!--[if gte IE 9]> 
<p>You're using a recent version of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<!--[if lt IE 9]> 
<p>Hm. You should upgrade your copy of Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]--> 

<![if !IE]> 
<p>You're not using Internet Explorer.</p> 
<script type="text/javascript">//do something</script> 
<![endif]> 
+0

Có, nhưng tôi đã hỏi làm thế nào để làm điều đó theo lập trình với javascript ... tác giả plugin không thể mong đợi mỗi trang có ý kiến ​​có điều kiện tại chỗ, vì vậy chúng tôi phải thêm chúng vào của riêng của chúng tôi. – Mottie

Các vấn đề liên quan