Question

Je suis en train d'inclure le site Google Code Optimizer JavaScript, ci-dessous, dans un modèle de page Zope3. Il est utilisé pour des tests A / B.

Cependant, l'analyseur html de modèle, que je crois est le module standard Python HTMLParser, jette l'erreur suivante:

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

Comme je le vois, j'ai deux options:

  • Réécrire le code il passe (mon JS-foo est faible, aucune idée où commencer).

  • Assurez-vous HTMLParser ignorer le code. J'ai essayé balises CDATA sans succès. J'ai aussi essayé de mettre les js dans un fichier externe et un lien vers elle, mais semble pour briser la fonctionnalité d'optimisation.

Le code suspect:

<!-- 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 -->
Était-ce utile?

La solution

Compte tenu de la faiblesse, vous pouvez essayer de briser les parties du CDATA de l'analyseur qu'il essaie d'interpréter comme des balises, par exemple où vous avez maintenant </sc'+'ript>' essayer <'+'/sc'+'ript>' etc (+ fait catenation chaîne dans JS, comme en Python, donc il sera remis ensemble à nouveau les balises que vous briser cette façon, tout comme les balises qui sont déjà brisés dans l'original).

Si cela continue à donner des erreurs d'analyse, par perdre la CDATA et changer tous les < en &lt;, tous les > en &gt; - pas sûr que JS va gérer cela, mais il vaut la peine d'essayer ... bonne chance

Autres conseils

En fait, ce problème est trivial à résoudre en évitant l'analyseur HTML tous ensemble. Il suffit de mettre le script de configuration de Google dans un fichier séparé ou d'un objet comme Javascript et tirez dans la page avec TAL inclure.

L'analyseur HTML n'est pas utilisé lorsque le fichier est introduit comme Javascript.

Je suppose que l'analyseur n'aime pas le fait que

</sc'+'ript> 

est divisé en deux. Ce qui est parfaitement javascript valide mais peut confondre le HTMLParser?

pourriez vouloir essayer

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

Une autre option que vous avez est de placer le code dans un fichier externe et la référence au lieu de l'intégrer directement dans le code. Je l'ai fait et il fonctionne bien. C'est toujours un moyen plus facile si vous ne voulez pas le validateur pour ramper tout javascript ou css.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top