Pregunta

Estoy tratando de incluir el código JavaScript Optimizador de sitios web de Google, a continuación, en una plantilla de página Zope3. Se utiliza para para las pruebas A / B.

Sin embargo, el analizador de plantillas HTML, que creo que es el módulo estándar de Python HTMLParser, lanza el siguiente error:

raise PTRuntimeError(str(self._v_errors))
- Warning: Compilation failed
- Warning: <class 'HTMLParser.HTMLParseError'>: bad end tag: u"</sc'+'ript>", at line 45, column 44
PTRuntimeError: ['Compilation failed', '<class \'HTMLParser.HTMLParseError\'>: bad end tag: u"</sc\'+\'ript>", at line 45, column 44']

Tal como lo veo yo tengo dos opciones:

  • Vuelva a escribir el código por lo que pasa (mi JS-foo es débil, ni idea de por dónde empezar).

  • Hacer HTMLParser ignorar el código. He intentado etiquetas CDATA sin éxito. También he intentado poner el js en un archivo externo y vincular a ella, pero esto Parece para romper la funcionalidad de optimizador.

El código sospechoso:

<!-- Google Website Optimizer Control Script -->
<script>
<![CDATA[
function utmx_section(){}function utmx(){}
(function(){var k='1010538027',d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;
d.write('<sc'+'ript src="'+
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})();
]]>
</script><script>utmx("url",'A/B');</script>
<!-- End of Google Website Optimizer Control Script -->
¿Fue útil?

Solución

Dada la debilidad del analizador, podría intentar romper las partes de la CDATA que está tratando de interpretar como etiquetas, por ejemplo donde ahora tiene </sc'+'ript>' tratar <'+'/sc'+'ript>' etc (+ hace catenation cadena en JS, al igual que en Python, por lo que poner de nuevo juntos de nuevo las etiquetas se rompe de esta manera, al igual que las etiquetas que ya están rotas en el original).

Si esto sigue dando errores de análisis, perderá el CDATA y cambiar cada < en &lt;, cada > en &gt; - no estoy seguro si JS se encargará de eso, pero vale la pena intentarlo ... buena suerte

Otros consejos

En realidad, este problema es trivial para resolver evitando el analizador HTML todos juntos. En pocas palabras la secuencia de comandos de control de Google en un archivo separado o un objeto como Javascript y tire de ella en la página con un TAL incluyen.

El analizador de HTML no se utiliza cuando el archivo se trae como Javascript.

Mi conjetura es que el analizador no le gusta el hecho de que

</sc'+'ript> 

se divide en dos. Lo cual es perfectamente válido javascript pero puede confundir al HTMLParser?

Puede que desee probar

<'+'/sc'+'ript>'

Otra opción que tienes es colocar el código en un archivo externo y hacer referencia a ella en lugar de incrustar directamente en el código. He hecho esto y funciona bien. Eso es siempre una manera más fácil si usted no desea que el validador para rastrear cualquier JavaScript o CSS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top