2012-02-17 9 views
6

Dato other questions sullo stesso argomento che sento ho capito le giustificazioni apparenti per concatenare il tag <script> come '<scr'+'ipt..' in una stringa javascript bookmarklet, anche se questo è di per sé misguided.concatenazione di 'SCR' + 'IPT' nel codice javascript

Tuttavia, guardando il codice per il Instapaper bookmarklet vedo d.createElement('scr' + 'ipt'). La parte rilevante del codice (abbellita) è alla fine della domanda.

Anche se questo (anti) modello è quello di evitare il parser HTML recalcitranti alla marcatura dopo il verificarsi del tag di chiusura <script> all'interno di una stringa javascript, posso vedere ancora meno giustificazione per farlo dato qui il testo concatenato fa non rappresentano nemmeno un tag <script>.

In questo caso, questo è fatto per qualche altro motivo?

javascript: function iprl5() { 
    var d = document, 
     z = d.createElement('scr' + 'ipt'), //??? 
     b = d.body, 
     l = d.location; 
+3

Qualcuno stava dormendo in quel momento. –

+6

Penso che sia solo un'applicazione dogmatica del pattern senza una comprensione del motivo per cui è stata eseguita. '' var test = document.createElement ('script'); '' non mi dà fastidio (e non me lo aspetterei). –

risposta

5

E 'stupido a scappare "<script>" come sarà non essere analizzato come tag all'interno di un blocco di script * ed è ancora più sciocco per trattare "script" come speciali. Non è. Manca uno < o </, senza il quale non verrà mai analizzato come tag - in qualsiasi contesto. Pertanto, f("script") e f("scr"+"ipt") hanno una semantica identica.

Tecnicamente in HTML, tutto</ in un blocco di script hanno bisogno di essere protetta contro, ma in pratica i browser si preoccupano solo </script>. Per questo motivo, "<"+"/script>" è ciò che raccomando, ma si applica solo ai tag di chiusura. Cioè, "<script>" (o "script" a seconda dei casi) è perfettamente valido all'interno di un blocco di script.

Felice codifica.


* Con compatibile parser HTML : tuttavia, arrotolato a mano (regex) analisi potrebbe esplodere in modi terribili. Le regole XML/XHTML sono diverse, ma allora il < deve essere codificato per essere ben formato in ogni caso ... forse qualche oscurità con CDATA? In ogni caso, è irrilevante per HTML.

Inoltre, le risposte legate Non sostengono per "<scr"+"ipt.." (o sottoinsiemi come "scr"+"ipt"): invece, essi sostengono per la guardia contro la chiusura costrutto script tag, che inizia con </, che non è nemmeno presente in il codice nel post ...

+1

Ho preso l'abitudine di rompere i miei tag '' scr '+' ipt'' perché il mio editor a volte si confondeva e falliva alla sintassi evidenziando il resto del file.Non è un bisogno, ma potrebbe spiegare perché alcune persone lo fanno. – Umbrella

+0

@Umbrella Un punto molto valido; [a volte tristemente] gli strumenti di sviluppo dettano una serie di convenzioni. –

+0

Per il riferimento http://www.w3.org/TR/html4/types.html#type-cdata –

3

No.

credo.

Mi aspetto che questo venga eseguito da qualcuno che è stato bruciato da un '</script>' e troppo protettivo.

Problemi correlati