Frage

Ich versuche, den Google Website-Optimierungstool JavaScript-Code enthalten, unten, in einer Zope3 Seitenvorlage. Es ist für für A / B-Tests verwendet.

Allerdings ist der Vorlage in HTML-Parser, die ich Python glauben ist der Standard-HTMLParser Modul, führt den folgenden Fehler:

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

Wie ich es sehe ich zwei Möglichkeiten:

  • Sie den Code neu schreiben, so dass es geht (meine JS-foo ist schwach, keine Ahnung, wo ich anfangen soll).

  • Machen Sie HTMLParser den Code ignorieren. Ich habe ohne Erfolg CDATA-Tags versucht. Ich habe auch versucht, die js in einer externen Datei setzen und die Verknüpfung zu, aber diese scheint das Optimierungsprogramm Funktionalität zu brechen.

Der Verdächtige Code:

<!-- 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 -->
War es hilfreich?

Lösung

Der Parser Schwäche gegeben, könnten Sie versuchen, die Teile des CDATA Zerschlagung, die es versucht, als Tags zu interpretieren, z.B. wo man </sc'+'ript>' jetzt versucht <'+'/sc'+'ript>' etc (+ tut String catenation in JS, genau wie in Python, so dass es wieder zusammen, die Tags gesetzt werden Sie auf diese Weise brechen, genau wie die Tags, die bereits gebrochen sind im Original nach oben).

Wenn das Parse-Fehler hält zu geben, die CDATA verlieren und jedes < in &lt; ändern, jedes > in &gt; - nicht sicher, ob JS damit umgehen wird, aber es ist einen Versuch wert ... viel Glück

Andere Tipps

Eigentlich ist dieses Problem trivial durch Vermeiden der HTML-Parser alle gemeinsam zu lösen. setzt das Google-Control Script in eine separate Datei oder das Objekt einfach als Javascript und ziehen Sie sich in die Seite mit einem TAL umfassen.

Der HTML-Parser nicht verwendet wird, wenn die Datei in wie Javascript gebracht wird.

Meine Vermutung ist, der Parser nicht die Tatsache mag, dass

</sc'+'ript> 

ist in zwei Teile gespalten. Welche absolut gültige Javascript, kann aber den HTMLParser verwirren?

Vielleicht versuchen wollen

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

Eine andere Option, die Sie haben, ist der Code in einer externen Datei zu platzieren und darauf verweisen, anstatt sie direkt in den Code einbetten. Ich habe dies getan, und es funktioniert gut. Das ist immer ein einfacher Weg, wenn Sie nicht der Prüfer wollen keine Javascript oder CSS kriechen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top