5

Tôi đang sử dụng html5boilerplate xây dựng kịch bản và khi rút gọn các kịch bản (trong đó sử dụng Google Closure Compiler)Internet Explorer, Closure Compiler và Trailing Dấu phẩy

Tôi nhận được lỗi này

-js.all.minify: 
    [echo] Minifying scripts 
    [copy] Copying 3 files to /Users/Username/Desktop/Web/intermediate/js 
    [apply] /Users/Juan/Desktop/Web/js/plugins.js:117: ERROR - Parse error. Internet Explorer has a non-standard intepretation of trailing commas. Arrays will have the wrong length and objects will not parse at all. 
    [apply]     }, { duration: 727 }) 
    [apply] 

      ^

Nhưng mã DOES làm việc trong IE 8 nếu chạy chưa được biên dịch.

Đây là mã

anim1.animate({ 
        'left': '+=32px', 
        'filter': 'alpha(opacity=100)', 
        '-moz-opacity': '1', 
        '-khtml-opacity': '1', 
        'opacity': '1', 
       }, { duration: 727 }) 

Làm thế nào tôi có thể làm cho mã này vượt qua Compulsure biên dịch?

Cảm ơn

Trả lời

10

Tháo dấu phẩy cuối cùng thừa từ đối tượng của bạn theo nghĩa đen:

anim1.animate({ 
    'left': '+=32px', 
    'filter': 'alpha(opacity=100)', 
    '-moz-opacity': '1', 
    '-khtml-opacity': '1', 
    'opacity': '1'  // <-- No comma here. 
}, { duration: 727 }); // <-- I'd also suggest a semicolon there. 

Như trình biên dịch Đóng nói, chữ bằng dấu phẩy đuôi như vậy không thể được phân tích bởi một số trình duyệt.

+0

Tôi chi tiêu quá nhiều vào mã này tôi không thể nhìn thấy nó ngay trong mắt của tôi. Tôi vẫn thấy nó lạ rằng mã hoạt động tốt trong IE 7,8,9 nhưng trình biên dịch xử lý nó một số loại lỗi nghiêm trọng. Cảm ơn Frédéric. – Juan

+1

Đây là một bài viết giải thích tại sao: http://www.enterprisedojo.com/2010/12/19/beware-the-trailing-comma-of-death/. Bạn có thể chuyển đổi lỗi này thành cảnh báo bằng cách sử dụng cờ '--jscomp_warning internetExplorerChecks'. –

+0

Thật tuyệt khi có JSHint và JSLint cho tôi biết điều này, vì tôi đã lãng phí cả ngày về điều này ... SMDH Cảm ơn –

4

Hoặc bật chế độ EcmaScript 5. Ecmascript 5 tiêu chuẩn hóa hành vi dấu phẩy sau nhưng IE8 không hỗ trợ đầy đủ ES5 (IE9 không bị thiếu chế độ nghiêm ngặt).