2012-02-17 8 views
6

Dada other questions sobre el mismo tema que siento que entiendo las justificaciones aparentes para concatenar la etiqueta <script>'<scr'+'ipt..' como en una cadena de JavaScript bookmarklet, aunque esto sí es misguided.concatenación de 'scr' + 'ipt' en el código javascript

Sin embargo, mirando el código para el Instapaper bookmarklet veo d.createElement('scr' + 'ipt'). La parte relevante del código (embellecido) está al final de la pregunta.

Aunque este patrón (anti) evite que el analizador HTML se bloquee en el marcado después de la aparición de la etiqueta de cierre <script> dentro de una cadena javascript, puedo ver incluso menos justificación para hacerlo aquí dado que el texto concatenado ni siquiera representa una etiqueta <script>.

En este caso, ¿se hace esto por alguna otra razón?

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

Alguien estaba durmiendo en ese momento. –

+6

Creo que es solo una aplicación dogmática del patrón sin una comprensión de por qué está hecho. '' var test = document.createElement ('script'); '' no me falla (y no lo esperaría). –

Respuesta

5

Es tonto para escapar "<script>" ya que no ser analizada como una etiqueta dentro de un bloque de script * y es aún más tonto para tratar "script" tan especial. No es. Carece de un < o </, sin el cual nunca se analizará como una etiqueta, en ningún contexto. Por lo tanto, f("script") y f("scr"+"ipt") tienen una semántica idéntica.

Técnicamente en HTML, </ todo en un bloque de script necesita ser vigilado en contra, pero en la práctica sólo se preocupan por los navegadores </script>. Debido a esto, "<"+"/script>" es lo que recomiendo, pero eso solo se aplica al cierre de etiquetas. Es decir, "<script>" (o "script" según sea el caso) es perfectamente válido dentro de un bloque de script.

Happy coding.


* Por un analizador compatible con HTML : sin embargo, (expresiones regulares) análisis hecho a mano puede explotar de manera terribles. Las reglas XML/XHTML son diferentes, pero entonces el < necesita ser codificado para que estén bien formadas de todos modos ... ¿quizás algunas obscuridades con CDATA? En cualquier caso, es irrelevante para HTML.

Además, las respuestas vinculadas No abogan por "<scr"+"ipt.." (o subconjuntos como "scr"+"ipt"): en cambio, argumentan a favor de la protección contra la cierre construcción guión-etiqueta, que comienza con </, que ni siquiera está presente en el código en la publicación ...

+1

Tengo el hábito de romper mis etiquetas '' Umbrella

+0

@Umbrella Un punto muy válido; [a veces tristemente], las herramientas de desarrollo dictan una serie de convenciones. –

+0

Para su referencia http://www.w3.org/TR/html4/types.html#type-cdata –

3

creo.

Supongo que esto es hecho por alguien que fue quemado por un '</script>' y se puso demasiado protector.