2013-04-02 43 views
6

Hiện nay tôi đang sử dụng để phát hiện jQuery.browser IE7 và thấpLàm thế nào để phát hiện IE7 và thấp hơn bằng cách sử dụng jQuery.support?

if ($.browser.msie && parseInt($.browser.version) <= 7) { 
    //codes 
} 

nhưng jQuery.browser đã bị phản đối trong jQuery 1.3 và loại bỏ trong jQuery 1.9, tôi đọc từ trang web của jQuery mà chúng ta nên sử dụng tính năng phát hiện thay vì (jQuery.support).

Vì vậy, làm thế nào để phát hiện IE7 và thấp hơn bằng cách sử dụng jQuery.support?

+2

Nên thông báo rằng thay vì phát hiện trình duyệt bạn phát hiện (các) đối tượng địa lý bạn cần hoặc phát hiện (thiếu tính năng này). –

+0

@Lee Taylor phát hiện này là cần thiết để sửa chữa một số hành vi lỗi trong IE7 & thấp hơn, không có tính năng nào liên quan đến – frosdqy

+2

Hành vi lỗi nào không thể được phát hiện? Tốt hơn nên hỏi làm thế nào để làm việc xung quanh các tính năng thiếu hoặc hành vi buggy. – RobG

Trả lời

10

Cách tốt nhất là sử dụng nhận xét có điều kiện và kiểm tra bằng cách sử dụng jQuery hasClass().

<!--[if lt IE 7]>  <html class="ie6"> <![endif]--> 
<!--[if IE 7]>   <html class="ie7"> <![endif]--> 
<!--[if IE 8]>   <html class="ie8"> <![endif]--> 
<!--[if gt IE 8]><!--> <html>   <!--<![endif]--> 

Và trong jQuery, hãy kiểm tra cho IE 7:

// Check IE 7 
if ($('html').hasClass('ie7'); 

Phương pháp này không thể giả mạo không có vấn đề gì. Xem thêm: Conditional Stylesheets bởi Paul Irish.

+0

Lưu ý rằng các chú thích có điều kiện đã được loại bỏ trong IE 10, vì vậy phương pháp này không thể được sử dụng để phát hiện các phiên bản IE 10 hoặc cao hơn. –

1

jQuery.Support không cung cấp cho bạn trình duyệt. Kể từ jQuery 1.9, hàm $ .browser không còn được dùng nữa. Nếu sau một cách nhanh chóng của bạn là cách dễ nhất là sử dụng đối tượng trình điều hướng gốc của trình duyệt.

//check for IE7 
if(navigator.appVersion.indexOf("MSIE 7.")!=-1) 

Sử dụng Modernizr

//check for IE7 or less 
if ($('html').hasClass('lt-ie7'); 

này không được khuyến khích tuy nhiên như các trình duyệt có thể dễ dàng "giả mạo" đối tượng này. Sử dụng một thư viện như Moderizer để phát hiện tính năng là cách tiếp cận hiện đại. Để biết thêm thông tin chi tiết, xem: 5+ WAYS TO CHECK IE VERSION USING JAVASCRIPT/JQUERY

-1

Bạn không thể phát hiện trình duyệt bằng jQuery.support.

Thay vì kiểm tra trình duyệt, bạn nên kiểm tra tính năng của trình duyệt bạn muốn sử dụng.

Ví dụ, nếu bạn muốn sử dụng tính năng ajax, bạn Linh hồn kiểm tra sự hiện diện của đối tượng XMLHttpRequest bởi jQuery.support.ajax

var ajaxEnabled = $.support.ajax; 
if (ajaxEnabled) { 
    // do something 
} 

jQuery.browser document nói rằng

jQuery .browser có thể được chuyển đến một plugin trong bản phát hành tương lai của jQuery.

Và cũng nói rằng

Bởi vì $ .browser sử dụng navigator.userAgent để xác định nền tảng này, nó là dễ bị giả mạo bởi người sử dụng hoặc che giấu thông bởi trình duyệt riêng của mình. Nó luôn luôn là tốt nhất để tránh mã trình duyệt cụ thể hoàn toàn nếu có thể. Thuộc tính $ .support có sẵn để phát hiện hỗ trợ cho các tính năng cụ thể thay vì dựa vào $ .browser.


Bạn có thể tạo mã phát hiện trình duyệt của riêng mình. Xem bên dưới. Nhưng hãy nhớ rằng mã này dễ bị tổn thương đối với giả mạo như tài liệu jQuery cho biết.

var ua = navigator.userAgent.toLowerCase(); 

var isOpera : (ua.indexOf('opera') >= 0) ? true : false; 
var isFirefox : (ua.indexOf('firefox') >= 0) ? true : false; 
var isMSIE : (ua.indexOf('msie') >= 0) ? true : false; 
var isMSIE6 : (ua.indexOf('msie 6.0') >= 0) ? true : false; 
var isMSIE7 : (ua.indexOf('msie 7.0') >= 0) ? true : false; 
var isMSIE8 : (ua.indexOf('msie 8.0') >= 0) ? true : false; 
var isMSIE9 : (ua.indexOf('msie 9.0') >= 0) ? true : false; 
// and other browsers... 
1

Khi những người khác đã nói cố gắng phát hiện phiên bản trình duyệt là một ý tưởng tồi và bạn nên dựa vào tính năng phát hiện.

Điều đó cho biết cách đáng tin cậy duy nhất để phát hiện công cụ hiển thị trình duyệt IE đang sử dụng nhận xét có điều kiện. Bạn có thể sử dụng đoạn mã này nhỏ mà sẽ nhận được điều đó cho bạn:

var ie = (function(){ 

    var undef, 
     v = 3, 
     div = document.createElement('div'), 
     all = div.getElementsByTagName('i'); 

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

    return v > 4 ? v : undef; 

}()); 

Hãy ghi nhớ rằng điều này sẽ chỉ làm việc trong các phiên bản IE hỗ trợ bình luận có điều kiện và nó sẽ không làm việc trong IE10 hoặc cao hơn.

2

chức năng nhỏ này sẽ cho bạn biết mã nút bị phá vỡ:

function isButtonBroken() 
{ 
    var b = document.createElement('button'); 

    b.value = 1; 
    b.appendChild(document.createTextNode('2')); 

    return b.value === '12'; 
} 
+0

wow, cảm ơn jack hoạt động rất tốt cho việc phát hiện nút gửi vấn đề trong IE7 – frosdqy

0

Một giải pháp không có kịch bản có thể dựa trên đưa ra các nút một loại trình và một tên đó là giá trị mà bạn muốn gửi . Sau đó, tại máy chủ, hãy thực hiện hành động phụ thuộc vào giá trị của thuộc tính name, không phải giá trị, ví dụ:

<button type="submit" name="whatever" value="Click me 0">Click me 0</button> 

Bây giờ mọi trình duyệt sẽ gửi nút là &whatever=Click+me+0. Tôi không có IE 7 để thử nghiệm với, nhưng từ những gì bạn đã đăng, điều đó sẽ hoạt động.

Nếu bạn có nhiều nút trong biểu mẫu, chỉ một nút được nhấp để gửi biểu mẫu sẽ thành công, vì vậy chỉ có tên và giá trị của nút đó sẽ được gửi.

Tất nhiên, cách đơn giản nhất là sử dụng tính năng nhập loại đầu vào, nhưng có thể bạn không thể làm điều đó.

+0

Cảm ơn RobG, sẽ cố gắng này, yeah không thể sử dụng loại đầu vào gửi cho một số lý do kiểu dáng>< – frosdqy

0

U Có thể phát hiện bằng cách sử dụng điều kiện sau.

if (!$.support.leadingWhitespace) { 
    //IE7 stuff 
} 
Các vấn đề liên quan