Domanda

Sto cercando di includere il codice JavaScript ottimizzare il sito di Google, qui di seguito, in un modello di pagina Zope3. E 'usato per per il test A / B.

Tuttavia, il parser modello HTML, che a mio avviso è il modulo standard di Python HTMLParser, lancia il seguente errore:

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

Come la vedo io ho due opzioni:

  • Riscrivere il codice in modo che passa (la mia JS-foo è debole, nessuna idea da dove cominciare).

  • Fare HTMLParser ignorare il codice. Ho provato tag CDATA senza successo. Ho anche provato a mettere i js in un file esterno e il collegamento ad essa, ma questo sembra per interrompere la funzionalità di ottimizzazione.

Il codice sospetto:

<!-- 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 -->
È stato utile?

Soluzione

Data la debolezza del parser, si potrebbe provare a rompere le parti del CDATA che sta cercando di interpretare come tag, per esempio dove ora avete </sc'+'ript>' provare <'+'/sc'+'ript>' etc (+ fa stringa di concatenazione in JS, proprio come in Python, quindi sarà messo di nuovo insieme i tag si rompe in questo modo, proprio come i tag che sono già rotto in originale).

Se questo continua a dare errori di analisi, perdere il CDATA e cambiare ogni < in &lt;, ogni > in &gt; - non è sicuro se JS gestirà che ma vale la pena di provare ... in bocca al lupo

Altri suggerimenti

In realtà, questo problema è banale da risolvere, evitando il parser HTML tutti insieme. In poche parole lo script di controllo di Google in un file separato o un oggetto come Javascript e tirarlo nella pagina con un TAL includere.

Il parser HTML non viene utilizzato quando il file viene portato come Javascript.

La mia ipotesi è che il parser non piace il fatto che

</sc'+'ript> 

è diviso in due. Che è perfettamente valida javascript, ma può confondere la HTMLParser?

potrebbe desiderare di provare

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

Un altra opzione che avete è quello di mettere il codice in un file esterno e fare riferimento a esso, invece di incorporarlo direttamente nel codice. Ho fatto questo e funziona bene. Questo è sempre un modo più semplice, se non si vuole il validatore a strisciare eventuali JavaScript o CSS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top