2012-08-31 7 views
16

Ricevo questo errore nella console di safari quando provo a fare qualcosa da un punto di interruzione. Bug report qui: https://bugs.webkit.org/show_bug.cgi?id=83267SyntaxError: le istruzioni 'with' non sono valide in modalità strict

Qualcuno ha una soluzione alternativa? Per motivi che sto assumendo sono legati a questo javascript ha smesso di funzionare sul mio sito in safari.

modifica: la segnalazione di errore contiene anche passaggi di riproduzione.

un'altra modifica: non sto usando una dichiarazione "con". Questo è un bug dalla console di safari.

+1

Non specifico per Safari. ''usa strict'; con (this);' in FF/Chrome produce "il codice della modalità rigorosa non può contenere 'con' istruzioni". –

+11

E 'specifico per Safari nel fatto che se provi a valutare qualcosa nella console del debugger all'interno di un "use strict"; 'scope, ottieni questo errore, anche se non riesci a vedere la parola' with' ovunque nello script o in quello che hai digitato. Apparentemente Safari avvolge qualsiasi cosa tu abbia digitato in un 'with' e prova a valutarlo. Vedi il rapporto sui bug di riferimento per maggiori dettagli. –

+1

possibile duplicato di [Can not inspect scope variable quando si utilizza la modalità strict] (http://stackoverflow.com/questions/8545191/cant-inspect-scope-variable-when-using-strict-mode) –

risposta

6

L'istruzione with(obj) {} è deprecata e, come tale, non è valida in modalità rigorosa.

Per risolvere questo problema, disabilitare la modalità rigorosa oppure interrompere l'utilizzo con istruzioni!

+0

Sono tecnicamente non usare con (safari è internamente suppongo?) ma questo è il mio doctype: ... è questo che cosa "rigido" significa in questo contesto? – quinn

+0

No. La modalità rigorosa è abilitata con '" use strict "' nella parte superiore del tuo file JS. – Eric

+3

Quindi immagino che la soluzione alternativa sarebbe rimuovere 'use strict' ovunque che posso trovarlo fino a quando Safari risolverà questo bug? – quinn

2

Modalità rigorosa in ECMAScript 5 divieti es. with dichiarazione. Hai due scelte:

  • modalità rigorosa disabilitare (rimuovere "strict mode"; riga dal file/funzioni), o
  • (preferito) Non utilizzare with dichiarazioni - sono dannosi e totalmente illeggibile.

Ulteriori informazioni sulla modalità rigorosa di John Resig: ECMAScript 5 Strict Mode, JSON, and More.

Si può leggere in questo articolo, che la modalità rigorosa:

  • ti rende incapace di delete variabili (come in delete foo;),
  • limiti di utilizzo di eval,
  • aggiunge alcune limitazioni alle funzioni (ad es. accesso caller e callee),
  • rimuove with dichiarazioni,
+1

Non è l'OP che usa, è il codice della console di Safari. – gotofritz