Domanda

    

Questa domanda ha già una risposta qui:

         

Sto cercando di eseguire il debug di uno script JavaScript che viene letto in un'estensione di Firefox ed eseguito. Riesco a vedere solo gli errori tramite la console di Firebug (il mio codice è invisibile a Firebug) e riporta una & Quot; stringa non terminata letterale. & Quot;

Ho controllato la linea e le linee attorno ad essa e tutto sembra che parentesi, parentesi graffe e virgolette siano bilanciate, ecc. Quali sono le altre possibili cause che dovrei cercare?

È stato utile?

Soluzione

La maggior parte dei browser sembra avere problemi con questo codice:

var foo = "</script>";

In Firefox, Opera e IE8 ciò provoca un errore letterale di stringa non terminato. Può essere piuttosto brutto quando si serializza il codice html che include script.

Altri suggerimenti

Cerca interruzioni di riga! Quelle sono spesso la causa.

Vorrei votare la risposta di jamtoday se avessi il " reputazione "

Se i tuoi dati vengono inviati tramite PHP, questo potrebbe essere utile

$str = str_replace(array("\r", "\n"), '', $str);

Ho appena scoperto che "<\/script>" sembra funzionare così come "</scr"+"ipt>".

Potresti provare a eseguire lo script tramite JSLint .

Basta sfuggire alla chiusura dei tag o utilizzare il codice ASCII

es

<\/script>

es

<&#47;script>

Se hai eseguito operazioni di taglia / incolla: alcuni evidenziatori di sintassi online mangeranno virgolette singole e doppie, trasformandole in coppie di quote formattate (coppie di apertura e chiusura abbinate). (anche se non riesco a trovare alcun esempio in questo momento) ... Quindi questo implica colpire Comando- + alcune volte e fissare i tuoi caratteri di citazione

Prova un font diverso? inoltre, editor e IDE diversi utilizzano tokenizzatori diversi e regole di evidenziazione e JS è uno dei linguaggi più dinamici da analizzare, quindi prova ad aprire il file in emacs, vim, gedit (con plugin JS) ... Se sei fortunato, uno di loro mostrerà una lunga stringa viola che attraversa la fine di file.

Cerca una stringa che contiene una virgoletta singola senza caratteri di escape che può essere inserita da un codice lato server.

Sei sfuggito alle tue barre (/)? Ho avuto problemi con quelli prima

Hai provato Chromebug ? È il Firebug per estensioni.

Ho avuto problemi con le virgolette angolate in passato (& # 8216;) di solito da copia e incolla da Word. Sostituirli con virgolette singole regolari (') fa il trucco.

Inoltre, tieni presente che% 0A è l'URL del carattere di avanzamento riga codificato. Mi ci è voluto un po 'per trovare dove c'era un avanzamento di riga nel mio codice offensivo.

Se nulla aiuta, cerca alcuni caratteri uni-code come

\u2028

questo potrebbe spezzare la stringa su più di una riga e generare questo errore

Forse è perché hai un'interruzione di riga nel tuo codice PHP. Se hai bisogno di interruzioni di riga nel messaggio della finestra di avviso, includilo come sintassi di escape alla fine di ogni riga nel tuo codice PHP. Di solito lo faccio nel modo seguente:

$message = 'line 1.\\n';
$message .= 'line 2.';

Prova un " ricerca binaria " ;. Elimina metà del codice e riprova. Se l'errore persiste, eliminare metà del codice rimanente. Se l'errore non è presente, reinserisci ciò che hai eliminato ed eliminane metà. Ripetere.

Dovresti essere in grado di restringerlo a poche righe abbastanza rapidamente. La mia esperienza è stata che a questo punto noterai una stupida stringa malformata.

Potrebbe essere opportuno eseguirlo su una versione salvata dell'output HTML nel browser, se non si è sicuri della risorsa sul lato server in cui si trova l'errore.

Lo sviluppatore di pagine Web ha indovinato quale codifica viene utilizzata dal browser del visualizzatore. Questo di solito può essere risolto specificando una codifica nell'intestazione della pagina.

Scansiona il codice che arriva prima della riga # menzionata dal messaggio di errore. Qualunque cosa non sia terminata ha portato a qualcosa a valle, (la linea incolpata #), ad essere contrassegnato.

Lo spazio bianco è un altro problema che trovo, causa questo errore. L'uso di una funzione per tagliare gli spazi bianchi può essere d'aiuto.

$ str = str_replace (array (" \ r \ n ", " \ n \ r ", " \ r " ;, " \ n "), '
', strisce ($ str));

Questo dovrebbe funzionare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top