una tablas tabla obtener llamar dinamicas desde datos con archivo agregar javascript xml jsf xhtml facelets

javascript - tablas - El nombre de la entidad debe seguir inmediatamente el ''&'' en la referencia de la entidad



obtener datos de una tabla html javascript (5)

Quiero poner un juego de packman en mi página * .xhtml. (Estoy usando jsf 2 y Primefaces 3.5)

Sin embargo,

cuando "traduje" la página html en xhtml me sale un error en este script:

<script> var el = document.getElementById("pacman"); if (Modernizr.canvas && Modernizr.localstorage && Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) { window.setTimeout(function () { PACMAN.init(el, "./"); }, 0); } else { el.innerHTML = "Sorry, needs a decent browser<br /><small>" + "(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>"; } </script>

En línea:

if (Modernizr.canvas && Modernizr.localstorage &&

yo obtengo:

El nombre de la entidad debe seguir inmediatamente a ''&'' en la referencia de la entidad.

¿Alguna idea de como arreglarlo?


Debe agregar una etiqueta CDATA dentro de la etiqueta del script, a menos que desee pasar manualmente y escapar de todos los caracteres XHTML (por ejemplo, & tendría que convertirse en &amp; ). Por ejemplo:

<script> //<![CDATA[ var el = document.getElementById("pacman"); if (Modernizr.canvas && Modernizr.localstorage && Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) { window.setTimeout(function () { PACMAN.init(el, "./"); }, 0); } else { el.innerHTML = "Sorry, needs a decent browser<br /><small>" + "(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>"; } //]]> </script>


El analizador espera algo de contenido HTML, por lo que ve & como el comienzo de una entidad, como &egrave; .

Use esta solución alternativa:

<script type="text/javascript"> // <![CDATA[ Javascript code here // ]]> </script>

por lo que especifica que el código no es texto HTML sino solo datos que se utilizarán tal cual.


Hacer

<script>//<![CDATA[ /* script */ //]]></script>


Si utiliza XHTML, por alguna razón, tenga en cuenta que XHTML 1.0 C 4 dice: "Use scripts externos si su script usa <o & o]]> o -." Es decir, no incruste código de script dentro de un elemento script pero <script src="foo.js"></script> en un archivo JavaScript separado y refiérase a él con <script src="foo.js"></script> .


Todas las respuestas publicadas hasta ahora brindan las soluciones correctas, sin embargo, ninguna respuesta fue capaz de explicar adecuadamente la causa subyacente del problema concreto.

Facelets es una tecnología de visualización basada en XML que utiliza XHTML + XML para generar resultados HTML. XML tiene cinco caracteres especiales que tienen un tratamiento especial por el analizador XML:

  • < el comienzo de una etiqueta.
  • > el final de una etiqueta.
  • " el inicio y el final de un valor de atributo".
  • '' el inicio y el final alternativos de un valor de atributo.
  • & el comienzo de una entidad (que termina con ; ).

En el caso de & que no va seguido de # (por ejemplo &#160; &#xA0; etc.), el analizador XML busca implícitamente uno de los cinco nombres de entidad predefinidos lt , gt , amp , quot y apos , o cualquier nombre de entidad definido manualmente . Sin embargo, en su caso particular, usted estaba usando & como operador de JavaScript, no como una entidad XML. Esto explica totalmente el error de análisis XML que obtuviste:

El nombre de la entidad debe seguir inmediatamente el ''&'' en la referencia de la entidad

Básicamente, está escribiendo código JavaScript en el lugar equivocado, un documento XML en lugar de un archivo JS, por lo que debería escaparse de todos los caracteres especiales XML en consecuencia. El & debe ser escapado como &amp; .

Entonces, en tu caso particular, el

if (Modernizr.canvas && Modernizr.localstorage &&

debe convertirse

if (Modernizr.canvas &amp;&amp; Modernizr.localstorage &amp;&amp;

para que sea XML-válido.

Sin embargo, esto hace que el código de JavaScript sea más difícil de leer y mantener. Como se indica en el excelente documento de JavaScript de la Red de Desarrolladores de Mozilla para XHTML , debe colocar el código JavaScript en un bloque de datos de caracteres (CDATA). Por lo tanto, en términos JSF, eso sería:

<h:outputScript> <![CDATA[ // ... ]]> </h:outputScript>

El analizador XML interpretará los contenidos del bloque como datos de caracteres "simples" y no como XML y, por lo tanto, interpretará los caracteres especiales XML "tal como están".

Pero, mucho mejor es simplemente poner el código JS en su propio archivo JS que incluye por <script src> , o en términos JSF, el <h:outputScript> .

<h:outputScript name="onload.js" target="body" />

(tenga en cuenta el target="body" ; de esta forma, JSF representará automáticamente el <script> al final de <body> , independientemente de dónde se encuentre <h:outputScript> , logrando así el mismo efecto que con window.onload y $(document).ready() , por lo que ya no necesita usarlos en esa secuencia de comandos)

De esta forma, no necesita preocuparse por los caracteres XML especiales en su código JS. Como una ventaja adicional, esto le da la oportunidad de dejar que el navegador guarde en caché el archivo JS para que el tamaño de respuesta total sea menor.

Ver también: