2009-11-02 34 views
33

Sto riscontrando un problema in cui un tag script finale all'interno di una stringa tra virgolette in JavaScript e sta uccidendo lo script. Presumo che questo non è un comportamento previsto. Un esempio di questo può essere visto qui: http://jsbin.com/oqepe/editTag script nella stringa JavaScript

Il mio browser di test case per gli interessati: Mozilla/5.0 (X11; U; Linux i686; en-US; rv: 1.9.1.4) Gecko/20091028 Ubuntu/9.10 (karmic) Firefox/3.5.4.

risposta

64

Cosa succede?

Il parser HTML del browser vedrà lo </script> all'interno della stringa e lo interpreterà come la fine dell'elemento di script.

Guardate la colorazione della sintassi di questo esempio:

<script> 
var test = 'foo... </script> bar.....'; 
</script> 

notare che la parola bar viene trattato come contenuto testuale esterno dell'elemento script ...

una tecnica comunemente usata è per utilizzare l'operatore di concatenazione:

var test = '...... </scr'+'ipt>......'; 
+3

Funziona, ma sono sorpreso che devo farlo. Parte del problema è che sto raschiando una pagina e memorizzando i risultati in una variabile JS. Non ho aspettative reali su cosa stia tornando. – re5et

+0

Come lo si archivia in una variabile? Stai raschiando lato server quindi generando 'var x = ;'? Se è così, non dimenticare di codificarlo con JSON. – orip

+12

Sfuggi al /, non dividere la stringa in parti. IIRC è ancora un errore in HTML 4.x. È sicuramente più difficile da digitare, più da leggere, più caratteri da gestire e meno efficiente (poiché la concatenazione delle stringhe non è la più economica delle operazioni JS) – Quentin

11

avete bisogno di sfuggire esso, altrimenti sarà una parte del codice HTML.

var test = 'what the hell... \<\/script\> \<h1\>why?!?!?!\<\/h1\>'; 
+5

non è corretto. questa è una variabile che sta memorizzando il testo. Non è inserito nel codice HTML. L'utilizzo di un tag diverso dallo script non avrà gli stessi risultati. – re5et

+0

È il modo in cui viene eseguito il rendering XML. Puoi anche avvolgere lo script con . Non succederà con altri tag perché il modo in cui funziona il parser XML (in particolare tratta lo script come testo e non come codice). – LiraNuna

+1

@LiraNuna Umm. No. Un parser XML tratterà '' come "Fine dello script" e '' come un errore di ben-forma. Un parser HTML tratterà '' come "fine dello script" e quindi se è '' come "Errore nella gestione non definito dalla specifica". Solo un parser di tag tag (e possibilmente un parser HTML5, non ho letto il draft abbastanza da essere sicuro) tratterà '' come parte dello script. – Quentin

Problemi correlati