5

Używam html5boilerplate kompilacji skryptu, a kiedy minifying skrypty (który używa Google Closure Compiler)Internet Explorer, Closure Compiler i Trailing Przecinki

dostaję ten błąd

-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] 

      ^

ale kod DZIAŁA W IE 8, jeśli działa bez kompilacji.

Jest to kod

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

Jak mogę uczynić ten kod przepustkę Compulsure Compiler?

Dzięki

Odpowiedz

10

Usunąć zbędne ostatni przecinek z obiektu dosłownym:

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. 

Jako kompilator Zamknięcie mówi literały z takimi przecinkami spływu nie mogą być przetwarzane przez niektórych przeglądarkach.

+0

Tak dużo wydałem na ten kod, że nie mogłem tego zobaczyć w oczach moich oczu. Nadal uważam, że to dziwne, że kod działa poprawnie w IE 7, 9, ale kompilator traktuje go jako pewnego rodzaju fatalny błąd. Dzięki Frédéric. – Juan

+1

Oto artykuł wyjaśniający, dlaczego: http://www.enterprisedojo.com/2010/12/19/beware-the-trailing-comma-of-death/. Możesz skonwertować ten błąd na ostrzeżenie, używając flagi '--jscomp_warning internetExplorerChecks'. –

+0

Byłoby naprawdę miło, gdyby JSHint i JSLint powiedzieli mi o tym, ponieważ właśnie zmarnowałem cały dzień na to ... SMDH Dzięki –

4

Lub włącz tryb EcmaScript 5. Ecmascript 5 standaryzuje zachowanie przed przecinkiem, ale IE8 nie obsługuje go w pełni ES5 (podobnie IE9, który nie ma trybu ścisłego).