2013-01-24 29 views
10

tôi nhận được một lỗi với ngẫu hứng ver 4.1 khi chạy dưới jquery mới nhất 1.9Impromptu .. với jquery 1.9 - lỗi với browser.msie

của router Lỗi Loại: Không thể đọc thuộc 'MSIE' không xác định

này không phải là trường hợp với các phiên bản trước của jquery.

Dòng vi phạm trong ngẫu hứng là dòng 20:

var ie6 = ($.browser.msie && $.browser.version < 7); 
+1

'jQuery.browser': không được dùng nữa: 1.3, đã bị xóa: 1.9 – undefined

+0

Aha ... vậy ngẫu nhiên sẽ phá vỡ cho mọi người? – Upland

+0

Nếu plugin đó phụ thuộc vào thuộc tính 'trình duyệt', với jQuery 1.9, có. – undefined

Trả lời

24

Bạn có thể vá Impromptu thay thế dòng này:

var ie6 = ($.browser.msie && $.browser.version < 7); 

... bởi một điều này:

var ie6 = (navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/)); 

... vì vậy bây giờ nó có thể làm việc với jQuery v1.9.0 +. Tùy chọn, bạn có thể rollback đến jQuery v1.8.3

EDIT (ngày 12 tháng ba năm 2013)

Cảm ơn @johntrepreneur để lấy ý kiến ​​của bạn, bạn là chính xác. Hai lưu ý:

  1. dòng đã chỉnh sửa này:

    var ie6 = (navigator.userAgent.match(/msie/i) && navigator.userAgent.match(/6/)); 
    

    ... nên được thay thế bằng cái này:

    var ie6 = (navigator.userAgent.match(/msie [6]/i)); 
    

    ... xấu của tôi, tôi vội vã viết vá. Điều đó sẽ làm các trick.

  2. Impromptu đã hoàn toàn loại bỏ hỗ trợ IE6 trong họ last commit (vào ngày 25/2013 sau khi bài gốc này). Vấn đề do OP mang lại là Impromptu đã vi phạm với jQuery v1.9 + ... đang cập nhật tệp Impromptu js vào số last version cũng khắc phục sự cố.

+0

@undefined: Tôi đoán tất cả các trường hợp liên quan cần phải được vá là giải pháp thay thế. – JFK

+0

Vâng, thực ra nó chỉ kiểm tra IE6. +1 – undefined

+1

@JFK dòng thay thế của bạn không giống nhau và khớp không chính xác vì nó tìm thấy bất kỳ "6" nào trong chuỗi userAgent. Tôi đã thử nghiệm nó trong IE8 và kiểm tra của bạn phù hợp (khi nó không nên) kể từ khi chuỗi userAgent có "msie" trong nó và một "6" ở một nơi khác trong nó quá: "Mozilla/4.0 (tương thích; MSIE 8,0; Windows NT 6.1 ; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Phương tiện truyền thông PC 6.0; .NET4.0C; .NET4.0E) ". – johntrepreneur

6

tôi thích này để nhắm mục tiêu một phạm vi, sẽ chạy mã chỉ trên < IE9 & jQuery 1.9+

if (/msie [1-8]./.test(navigator.userAgent.toLowerCase())) 
{ 
    //code here 
} 
2

Kể từ Jquery phản đối các $ .browser funcionality cách dễ nhất mà tôi tìm thấy , là tạo ra toàn cầu bằng javascript

var LTE_IE9 = false; 

và sử dụng điều kiện HTML Bộ chọn IE

<!--[if lte IE 9]> 
<script>LTE_IE9 = true;</script> 
<![endif]--> 
+0

Điều đó thực sự khá thông minh. – KyleFarris

0

tôi sử dụng nó.

var browser = $.browser; 
    if (! browser) { 
     var ua = navigator.userAgent.toLowerCase(); 
     var m = /(msie) ([\w.]+)/.exec(ua) || ! /compatible/.test(ua) && /(mozilla)/.exec(ua) || []; 
     browser = { version: m[2] }; 
     browser[ m[1] ] = true; 
    } 
0

thêm Jquery migrate Plugin

//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/1.2.1/jquery-migrate.min.js

$.browser.msie khỏi> jquery 1.9.X

0

như $ .browse bị phản đối kể từ jQuery V. 1.4 và loại bỏ trong khi jQuery V. 1.9

bạn vẫn có thể khắc phục vấn đề này bởi những dòng mã (đối với tất cả các trình duyệt)

jQuery.browser = {}; 
jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit/.test(navigator.userAgent.toLowerCase()); 
jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase()); 
jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase()); 
jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase()); 

Làm việc tốt cho tôi;

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