سؤال

أحاول تضمين رمز جافا سكريبت موقع Google على الويب، أدناه، في قالب صفحة Zop3. انها تستخدم للاختبار A / B.

ومع ذلك، فإن قالب HTML Parser، الذي أعتقد هو الوحدة النمطية القياسية 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']

كما أراها لدي خياران:

  • أعد كتابة التعليمات البرمجية بحيث يمر (بلدي js-foo ضعيف، لا فكرة أين تبدأ).

  • اجعل htmlparser تجاهل التعليمات البرمجية. لقد جربت علامات CDATA دون نجاح. لقد حاولت أيضا وضع JS في ملف خارجي وربط به، ولكن هذا يبدو لكسر وظائف Optimizer.

رمز المشتبه به:

<!-- 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 -->
هل كانت مفيدة؟

المحلول

بالنظر إلى ضعف المحلل المحلل، يمكنك محاولة كسر أجزاء CDATA التي تحاول تفسيرها كعلامات، على سبيل المثال أين لديك الآن </sc'+'ript>' محاولة <'+'/sc'+'ript>' إلخ (+ هل السلسلة تتبعت في JS، تماما مثل في ثيثون، لذلك سيعود معا مرة أخرى العلامات التي تنفصل بها بهذه الطريقة، تماما مثل العلامات التي تم تقسيمها بالفعل في الأصل).

إذا كان ذلك يحتفظ بإعطاء أخطاء تحليل، فقد تفقد CDATA وتغيير كل < داخل &lt;, ، كل > داخل &gt; - لست متأكدا ما إذا كان JS سوف يتعاملون مع ذلك، لكن الأمر يستحق المحاولة ... حظا سعيدا!

نصائح أخرى

في الواقع، هذه المشكلة تافهة لحلها عن طريق تجنب محلل HTML معا. ببساطة ضع البرنامج النصي للتحكم في Google في ملف أو كائن منفصل مثل JavaScript وسحبه إلى الصفحة باستخدام TAL.

لا يتم استخدام محلل HTML عند إحضار الملف باسم JavaScript.

تخميني هو المحلل لا يحب حقيقة ذلك

</sc'+'ript> 

انقسام في اثنين. التي هي جافا سكريبت صالحة تماما ولكنها قد تخلط بين htmlparser؟

قد ترغب في المحاولة

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

أحد الخيار الآخر لديك هو وضع الرمز في ملف خارجي ومرجعه بدلا من تضمينه مباشرة في التعليمات البرمجية. لقد فعلت هذا ويعمل بشكل جيد. هذه دائما طريقة أسهل إذا كنت لا ترغب في الزحف من Rostator أي جافا سكريبت أو CSS.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top