Pergunta

Eu estou tentando incluir o código JavaScript Optimizer Google Website, a seguir, em um modelo de página zope3. É usado para para o teste A / B.

No entanto, o analisador de modelo html, que eu acredito é o módulo Python HTMLParser padrão, lança o seguinte erro:

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']

A meu ver eu tenho duas opções:

  • Reescreva o código para que ele passa (meu JS-foo é fraco, não tem idéia por onde começar).

  • Faça HTMLParser ignorar o código. Eu tentei tags CDATA sem sucesso. Eu também tentei colocar os js em um arquivo externo e ligando para ela, mas esta parece para quebrar a funcionalidade otimizador.

O código suspeito:

<!-- 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 -->
Foi útil?

Solução

Dada a fraqueza do analisador, você poderia tentar romper as partes do CDATA que ele está tentando interpretar como tags, por exemplo, onde você tem agora </sc'+'ript>' tentar <'+'/sc'+'ript>' etc (+ faz catenation corda em JS, assim como em Python, por isso vai colocar de volta juntos novamente as tags que você quebrar-se desta forma, assim como as marcas que já estão quebrados no original).

Se isto continua dando erros de análise, perder a CDATA e mudar a cada < em &lt;, cada > em &gt; - não se JS irá lidar com isso, mas vale a pena tentar ... boa sorte

!

Outras dicas

Na verdade, este problema é trivial para resolver, evitando o analisador HTML todos juntos. Basta colocar o script de controle do Google em um arquivo ou objeto separado como Javascript e puxá-lo para a página com um TAL incluir.

O analisador HTML não é usado quando o arquivo é trazido como Javascript.

Meu palpite é o analisador não como o fato de que

</sc'+'ript> 

é dividido em dois. Que é javascript perfeitamente válido, mas pode confundir o HTMLParser?

pode querer tentar

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

Uma outra opção que você tem é a de colocar o código em um arquivo externo e referenciá-lo em vez de incorporá-lo diretamente no código. Eu fiz isso e ele funciona bem. Isso é sempre uma maneira mais fácil se você não quer que o validador para indexar qualquer javascript ou css.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top