Xpoint
   [напомнить пароль]

Правильный доктайп + TopList Counter = Баг в Mozilla

2004-11-25 15:26:50 [обр] Пётр Фомин [досье]

Вот минимальный код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<SCRIPT language=JavaScript><!--
d=document;a='';a+=';r='+escape(d.referrer)
js=10//--></SCRIPT>

<SCRIPT language=JavaScript1.1><!--
a+=';j='+navigator.javaEnabled()
js=11//--></SCRIPT>

<SCRIPT language=JavaScript1.2><!--
s=screen;a+=';s='+s.width+'*'+s.height
a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth)
js=12//--></SCRIPT>

<SCRIPT language=JavaScript1.3><!--
js=13//--></SCRIPT>

<SCRIPT language=JavaScript><!--
   d.write('<img style="display:none;" src="http://top.list.ru/counter'+
   '?id=89876;t=57;js='+js+a+';rand='+Math.random()+
   '" alt="TopList" '+ 'border=0 height=1 width=1>')
   if(js>11)d.write('<'+'!-- ')//-->
</SCRIPT>
<NOSCRIPT>
   <IMG style="DISPLAY: none" height=1 alt=TopList src="" width=1    border=0>
</NOSCRIPT>
<SCRIPT language=JavaScript><!--
   if(js>11)d.write('--'+'>')
//--></SCRIPT>

Mozilla вместо ничего выводит вот это:

11)d.write('--'+'>') //-->

Пофиксить его можно если заменить

if(js>11)d.write('--'+'>')

на

if(eval('js\x62 11'))d.write('--'+'>')

Это баг или фича?
Если баг то чей, TopList'a или Mozill'ы?

спустя 20 минут [обр] Юрий Щапов [досье]
Странно... А у меня в Мозилле 1.7 всё в порядке. :-/
спустя 11 минут [обр] Пётр Фомин [досье]
Юрий Щапов[досье]
А у меня на FireFox 0.9.3 и FireFox 0.7 (более новых версий у меня нету) всё имменно так как я описал
Видимо это всё-таки баг Mozill'ы.
спустя 6 минут [обр] Алексей В. Иванов [досье]
Проверил в Firefox 1.0, баг есть.
спустя 15 минут [обр] Юрий Щапов [досье]
Ага, на Файрфоксе 0.9.3 и 1.0 есть баг. А в Мозилле-то нету! Ну и дела...
спустя 53 минуты [обр] Владимир Палант [досье]
Юрий Щапов[досье]
В каком Mozilla у вас ничего не выводится? У меня в 1.4, 1.7.3 и 1.8 (примерно alpha 5) этот текст есть. Посмотрим, что там происходит...
спустя 4 минуты [обр] Владимир Палант [досье]
Юрий Щапов[досье]
Может у вас в Mozilla отключен JavaScript? Это не проблема парсинга, это именно проблема скриптов TopList Counter.
спустя 12 минут [обр] Владимир Палант [досье]

Разобрался. Проблема в скриптах, они работают "правильно" только в Quirks mode.

Кому-то пришла в голову бредовая идея, что тег NOSCRIPT надо вставить в комментарии, если включен JavaScript (зачем???). Для этого SCRIPT-блок перед NOSCRIPT пишет с помощью document.write() <!--, а тот, что после него - -->.

Что происходит на самом деле:
- Парсится и выполняется предпоследний SCRIPT-блок. Он пишет в документ начало комментария.
- NOSCRIPT оказывается в комментарии.
- Начало следующего SCRIPT-блока тоже оказывается в комментарии!!!
- Строка --.*?> интерпретируется, как конец комментария (Standards compliance mode)
- Оставшийся кусок скрипта выводится, как текст, поскольку тег <SCRIPT> - в комментарии

Решение очевидно: удалить строки if(js>11)d.write(...).

спустя 1 час 50 минут [обр] Пётр Фомин [досье]

Владимир Палант[досье]

- Строка --.*?> интерпретируется, как конец комментария (Standards compliance mode)

Тогда почему если посмотреть мозиллой (в этом же моде) вот такую раметку:

<!-->text-->

то она (Firefox) ничего не покажет?

спустя 40 минут [обр] Владимир Палант [досье]

А почему он должен что-то показывать? В Quirks Mode он это делает для совместимости с IE и NN4, но стандарт ничего не говорит о том, что > является концом комментария. См. также: bug 67874, bug 120385.

Кстати, у основной проблемы тоже есть свой баг: bug 212025.

спустя 2 часа 35 минут [обр] Пётр Фомин [досье]
А почему он должен что-то показывать?

Простите меня, просто я немного неправильно вас понял, я почему-то думал что в регЕкспе
-- .*?> первая часть это начало комментария (видимо организм требует сна).
Спасибо большое за разъяснение.

Кстати вот, что я заметил:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- -- >Эту строку будет видно только в Gecko браузерах <!--  -->

Это получаеться своеобразные Conditional Comments для Mozilla.

спустя 1 час 9 минут [обр] Владимир Палант [досье]
В самом деле, Опера эту строку не показывает (про IE я вообще молчу). Глюк, однако - как раз в этом смысле стандарт однозначен. Надо бы проверить этот код в Safari - думаю, что строка будет показываться.
спустя 13 часов [обр] Владимир Палант [досье]
Так, Opera эту строку показывает - это у неё, наверное, просто что-то в кеше заело. А вот как раз Safari почему-то не хочет...
Powered by POEM™ Engine Copyright © 2002-2005