2013-01-17 23 views
5

Vâng, tôi biết rằng tính năng phát hiện thích hợp hơn.Thay thế javascript nhanh, tinh khiết cho jquery.browser (được xóa trong jquery 1.9) là gì?

Tôi đã có một trường hợp trong codebase của mình nơi chúng tôi đang sử dụng $.browser.msie$.browser.version để quyết định có nên hiển thị một số CSS hay không. Nhà phát triển đã viết mã không còn với chúng tôi nữa và tôi không hiểu chính xác loại phát hiện tính năng nào tôi nên viết ở đây thay thế.

Để khắc phục nhanh, cách ngắn nhất để triển khai $ .browser.msie và $ .browser.version là gì?

+1

Tùy chọn đơn giản nhất là không nâng cấp jQuery? Sau đó, bạn sẽ không cần phải thay đổi gì cả. –

+0

Tại sao bạn cần phát hiện trình duyệt? Thay vào đó, bạn có thể sử dụng 'modernizr' để phát hiện tính năng thay vì phát hiện trình duyệt. –

+0

@JamesAllardice - chúng tôi đang phát triển một phần mở rộng, khách hàng của chúng tôi có thể chọn bất cứ phiên bản jQuery nào họ muốn. – ripper234

Trả lời

11

tôi sẽ chỉ sao chép mã từ jQuery 1.8.3.

// Limit scope pollution from any deprecated API 
(function() { 

var matched, browser; 

// Use of jQuery.browser is frowned upon. 
// More details: http://api.jquery.com/jQuery.browser 
// jQuery.uaMatch maintained for back-compat 
jQuery.uaMatch = function(ua) { 
    ua = ua.toLowerCase(); 

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 
     /(webkit)[ \/]([\w.]+)/.exec(ua) || 
     /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 
     /(msie) ([\w.]+)/.exec(ua) || 
     ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 
     []; 

    return { 
     browser: match[ 1 ] || "", 
     version: match[ 2 ] || "0" 
    }; 
}; 

matched = jQuery.uaMatch(navigator.userAgent); 
browser = {}; 

if (matched.browser) { 
    browser[ matched.browser ] = true; 
    browser.version = matched.version; 
} 

// Chrome is Webkit, but Webkit is also Safari. 
if (browser.chrome) { 
    browser.webkit = true; 
} else if (browser.webkit) { 
    browser.safari = true; 
} 

jQuery.browser = browser; 
})(); 
4

Sử dụng conditional comments thay vì JavaScript.

<!--[if lte IE 7]> 
<link rel="stylesheet" href="ie.css" type="text/css"> 
<![endif]--> 
+0

Cảm ơn, không liên quan đến tôi, tôi cần giải pháp javascript thuần túy (phát triển plugin javascript cho các trang web của bên thứ ba) – ripper234

+1

@ ripper234 Xem http://stackoverflow.com/questions/5653788/is-there-a-way-to- giới thiệu-internet-explorer-có điều kiện-ý kiến-sử dụng-javascr –

1

Khắc phục nhanh vì vậy kịch bản sẽ không phá vỡ cho đến khi nó refactored đúng cách (thêm ý kiến ​​có điều kiện cho các phiên bản khác nếu cần):

<!--[if IE 7]> 
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 7 }} </script> 
<![endif]--> 
<!--[if IE 8]> 
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 8 }} </script> 
<![endif]--> 
1

JQuery phát hành Migrate plugin để khôi phục $ .browser khi được sử dụng với 1.9. Chỉ cần chắc chắn sử dụng phiên bản sản xuất Di chuyển trên máy chủ sản xuất. Phiên bản phát triển sẽ tạo ra một loạt các thông báo bàn điều khiển cho bạn biết mã của bạn sẽ bị hỏng ở đâu trong 1,9 giây Di chuyển.

Sử dụng di chuyển JQuery để khôi phục $ .browser có lẽ không phải là giải pháp dài hạn tốt nhất. Như tên của nó, nó được dùng như một công cụ chuyển tiếp, và tôi không biết rằng chức năng phát hiện trình duyệt của nó sẽ được duy trì tích cực. Một giải pháp thay thế sẽ là Modernizr.

Điều mà cá nhân tôi sẽ làm là giữ trang web sản xuất của tôi trên JQ 1.8 trong thời gian này và thử nghiệm với phiên bản phát triển Di chuyển trên máy tính của tôi để hiểu rõ hơn về những gì 1.9 sẽ bị phá vỡ. nhiều hơn là chỉ xóa $ .browser) trước khi quyết định chiến lược nâng cấp.

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