2009-10-01 6 views
1

Я пытаюсь включить JavaScript-код оптимизатора веб-сайта Google ниже, в шаблон страницы Zope3. Он используется для тестирования A/B.Проверка кода JavaScript в Google Оптимизаторе через HTMLParser

Однако, шаблон HTML-парсер, который я считаю, это стандартный модуль Python HTMLparser, выдает следующее сообщение об ошибке:

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

Как я понимаю у меня есть два варианта:

  • Rewrite код, который он проходит (мой JS-foo слаб, не знаю, с чего начать).

  • Заставьте HTMLParser игнорировать код. Я пробовал теги CDATA без успеха. Я также попытался поместить js во внешний файл и связать его, но это кажется, чтобы сломать функциональность оптимизатора.

Подозреваемый код:

<!-- 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 --> 

ответ

1

Учитывая слабость парсера, вы могли бы попробовать ломки части CDATA, что он пытается интерпретировать как метки, например где у вас теперь есть </sc'+'ript>', попробуйте и т. д. (+ делает строку привязки в JS, как и в Python, так что она снова вернет теги, которые вы разбиваете таким образом, как теги, которые уже разбиты в оригинале).

Если продолжает давать разбора ошибок, теряют CDATA и меняются каждый < в &lt;, каждый > в &gt; - не уверен, что если JS будет обрабатывать это, но это стоит попробовать ... удачи!

0

Я думаю, синтаксический анализатор не нравится тот факт, что

</sc'+'ript> 

разделяется на две части. Что совершенно верно javascript, но может запутать htmlparser?

Может хотите попробовать

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

Так же верно, как и ответ Алекса, но он добавил немного более подробно;) –

-1

один другой вариант у вас есть, чтобы разместить код во внешнем файле и ссылаться на него вместо того, чтобы внедрить его непосредственно в код. Я сделал это, и он работает хорошо. Это всегда проще, если вы не хотите, чтобы валидатор сканировал любой javascript или css.

+0

Смотрите мой ОП, я пробовал это, и он «сломал функциональность оптимизатора». –

1

На самом деле, эту проблему тривиально решить, избегая парсера HTML все вместе. Просто поместите скрипт управления Google в отдельный файл или объект как Javascript и потяните его на страницу с включенным TAL.

Парсер HTML не используется, когда файл представлен как Javascript.