Перестаньте вынюхивать, что у меня за браузер

    С завидной периодичностью в блоге разработчиков браузера Опера появляются сообщения, что Опера не может распарсить ту или иную страницу и пользователь видит примерно такую ошибку:



    Эффект можно посмотреть по любой из этих ссылок. При этом, в других популярных браузерах страницы отображаются нормально, так же как и в Опере, если попросить распарсить документ как HTML, а не как XML (ссылка «Reparse document as HTML»).

    В какой-то момент мне стало интересно, почему так происходит. Вариантов не много, либо Опера не может распарсить XML, который могут распарсить другие браузеры, либо другие браузеры и не пытаются парсить страниц как XML, а считают, что это HTML. Долго искать причину не пришлось, дело оказалось в ответе сервера:
    Ответ Опере

    Ответ Фаерфоксу

    Получается, сервер просто «врет» некоторым браузерам. При этом точно можно сказать, что принимает решение он только лишь на основе строки User-Agent. Если, например, в Опере поставить в свойствах сайта Browser identification как Интернет Эксплорер, или Фаерфокс, страницы начинают чудесным образом открываться. Верно и обратное, если в Сафари задать юзерагент как «Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU)», то ему тоже будет выдаваться контент якобы application/xhtml+xml, и он тоже не сможет его распарсить:



    Получается, что страдает не только Опера, а любой другой браузер, не опознанный как «свой».

    Все осмотренные сайты с этой ошибкой объединяет одна вещь — они написаны на ASP.NET 2.0. Мне не известно, является ли это ошибкой команды Microsoft, или это дело рук доморощенных администраторов таких сайтов (всеже, не абсолютно все сайты, написанные на ASP.NET 2.0 страдают такой фигней). Хочу лишь дать совет разработчикам, который я написал в заголовке.

    А пользователям можно посоветовать только менять юзерагент для таких сайтов. В той же Опере это можно сделать на вкладке Network в свойствах сломанного сайта.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 103

      +12
      Да, тонны таких ошибок :( Постоянно приходится писать и просить.
      Но самое досадное — это когда отдают мобильную версию только завидев «Opera» в агенте.
        +1
        Ну, криворукие есть везде.
        Тут уж виноват не инструмент (определение браузера) а кривизна его использования.
        Само по себе определение делать приходится, т.к. далеко не всегда можно сделать так, чтоб один и тот же код адекватно работал везде и не спотыкался о глюки отдельно взятых браузеров (конечно, это больше актуально для сложных сайтов с изощренной структурой)…

        Так что я бы сказал не «Перестаньте вынюхивать, что у меня за браузер», а «Вынюхивайте с умом»…
          +9
          Для многих вещей нужно определять не браузер, а его возможности. Например, кто бы мог подумать, что в ИЕ9 будет канва и свг. Готов поспорить, есть люди, которые писали так:

          if (ie) {
              // VML
          } else {
              // SVG
          }

          Теперь их код работать не будет.

          Другое дело, что очень часто нельзя определить, есть ли фича в браузере. Например, я не могу сейчас сказать, будет ли глючить в ИЕ9 полупрозрачность с полупрозрачными картинками и не могу придумать, как это можно определить. Поэтому приходится до сих пор писать:

          if (ie) {
              $block.show();
          } else {
              $block.fadeIn();
          }
          • UFO just landed and posted this here
            • UFO just landed and posted this here
              0
              Это фичи. Когда вопрос в фичах браузера — тогда да, нужно определять их.

              Но есть и лаги. Тут остается только браузер и определять.

              В частности, в той же опере до сих пор не считаются дробные проценты и есть жесткие проблемы с расчетами скролов и размеров родителей у блоков с overflow:hidden (боди распухает до размеров скрытого контента, например) и большим и сложным контентом внутри (я багрепортил, да).
              Да, проблема возникает в основном на сложных сайтах с не_стандартной навигацией, но факт остается фактом. Бороться с этим — никак. Я сломал мозг об эту проблему, не решается.
              Поэтому приходится придумывать специально для оперы какие-то выкрутасы.

              Что делать в таком случае? Приходится определять браузер и выдавать ему другой код. Хреново, но альтернатив нету.
              Но конечно, это крайние методы, когда все другое уже перепробовано
                0
                покажи простенький пример — вместе подумаем ;-)
                  0
                  Простенький не получится, пожалуй…
                  nekisni.terion.name/#portfolio
                  Специально оставил этот форк верстки для багрепорта и продолжил с другой копией.
                  Если нажать на работу из списка — все увидете.
                  Когда работа «влетает» снизу вверх у боди вылазит вертикальный скрол.
                  Плюс — огромный горизонтальный, на ширину списка превьюшек, спрятанных в блок, с оверфлоу: хидден

                  Есть еще сайт, но там я уже вешаю костыли, так что он уже не репрезентативен.

                  Вообще, судя по всему, проблемы начинаются когда появляется позишн: абсолют.
                    +11
                    кто придумал такую ебанутую навигацию? =_=
                      –2
                      имхо — ничего так — имеет право на жизнь, если список не на три экрана. что-то похожее на fish eye.
                        0
                        ну там так много ессно в качестве стресс-теста.
                        это черновик все и наброски.
                        в реальности превьюшек вряд ли будет набираться на один экран
                        но вопрос не в этом
                          +2
                          ага, очень весело подвести мышь к превьюшке и наблюдать как она ускакивает фиг знает куда.
                          0
                          а это не важно. факт в том, что опера рендерит страницу неправильно.
                          даже ИЕ справляется.
                          вот почему я и говорю, что приходится заниматься определением браузера иногда
                            0
                            не могу посмотреть — у меня драгонфлай не пошет =(
                          0
                          Стоит последняя опера — всё ок, артефактов никаких не вижу.
                      0
                      в ие9 отключал vml? 0_0
                        0
                        Прозрачность в png не знаю, но для многих вещей подойдет Modernizr.
                  • UFO just landed and posted this here
                      –2
                      Ну насчет первого вы, конечно, загнули ) Но второе-третье стабильно, да.
                        +4
                        Оказывается, вы правы: по некоторым счётчикам, действительно, первое. Давно не смотрел статистику.
                      • UFO just landed and posted this here
                          0
                          Да, спасибо. Кстати, если переключить в режим Line тоже интересная картинка получается.
                            0
                            Странно, что результаты представленные в виде bar отличаются от line. Или я что-то не так понимаю?
                              0
                              Bar — это среднее значение за год. На line просто видно, как за год Opera чуть больше 8 процентов.
                            0
                            Интересно посмотреть на вот этот график: gs.statcounter.com/#browser_version-ww-monthly-200905-201006
                            Сразу видно, какие у IE проблемы с автообновлением.
                          –1
                          Акромя аськи пора России Оперу покупать
                          • UFO just landed and posted this here
                        • UFO just landed and posted this here
                          • UFO just landed and posted this here
                            • UFO just landed and posted this here
                                0
                                Ну это вопрос в определениях — можно ли считать ошибкой фреймворка возможность вставки в документ произвольного текста, в том числе не состоящего из валидных XMLных конструкций?
                                  –1
                                  Причем тут ASP.NET-то вообще? Он по-умолчанию не отдает страницу «в том, в чем больше нравится ему».
                                  0
                                  Странно зачем в DOCTYPE писать xhtml *и* отдавать с типом xhtml, если это не xhtml.
                                  +4
                                  > Или они тестировать проекты разучились?

                                  Вероятно, они вообще не знают про Opera.
                                    +4
                                    Я отметил, что проблема не в конкретном браузере, который они не знают, а во всех браузерах, которые они не знают, включая будущие браузеры.
                                      0
                                      Вы не правы. К примеру в таком браузере как netsurf(user-agent — netsurf) сайт отображается. Правда некорректно, т.к. у этого браузера нет js движка, но тем не менее.
                                      Или к примеру в таких браузерах как links/elinks/w3m — все нормально.

                                      Кроме того например в konqeror можно выставить произвольный user-agent и сайт продолжает отображаться, даже если konqeror притворяется оперой.
                                        0
                                        Наверное перечисленные вами браузеры просто не умеют работать с xml и не делают отличий от html.
                                          +1
                                          Именно так)
                                            0
                                            Konqeror опционально использует последнюю версию вебкита. Врядли она не умеет отличать xml от html как мне кажется.
                                            Вот стандартный конкверовский юзер-агент
                                            Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.3 (KHTML, like Gecko) konqueror/4.4.85 Safari/533.3
                                              0
                                              Он притворяется сафари. Уберите часть «AppleWebKit/533.3 (KHTML, like Gecko) konqueror/4.4.85 Safari/533.3», посмотрите, что будет.
                                                0
                                                Это просто стандартный юзер-агент. Я могу поставить туда любой другой или вообще его убрать — отображения сайта никак не меняется…

                                                Не знаю, может быть просто последние версии webkit как то обходят эту проблему.
                                                  0
                                                  Допускаю, что konqueror парсит как может, нарушая стандарты, либо вообще всегда парсит как html.
                                                    0
                                                    Вообще то есть WebKit KPart, который Konqueror успешно юзать умеет
                                      –1
                                      как показывают ныне бурлящие события, тестировать разучились не только вэб-разработчики…
                                      0
                                      А контент различается? Хотя бы DOCTYPE. Или только заголовки ответа?
                                        0
                                        Почти не отличается. Кое где разное количество переносов строк, но я думаю, это скорее разная интерпретация последовательностей символов \10 \13, чем реальные различия в тексте.
                                          +1
                                          я что-то подозреваю, что это проблема криво настроенного вэб-сервера IIS…
                                            0
                                            DOCTYPE значит одинаковый. Странно, почему Опера на него не смотрит.
                                              +2
                                              до этого даже не доходит — валится на этапе парсинга
                                          –1
                                          Действительно достала уже позиция некоторых разработчиков — типа «Опера плохой браузер и поэтому мой сайт нормально работает только в Файрфоксе». Возникает закономерный вопрос — «А хорош ли сайт, который работает только в том браузере, который нравится его создателю?»
                                            +1
                                            Сложно не согласиться, только статья немного не о том ;)
                                              0
                                              Я понимаю, это так — «крик души» :)
                                              +1
                                              Для России — опера актуальна. Если такое происходит у нас (т.е. на сайтах, целевая аудитория которых — наша страна) — позор таким разработчикам.

                                              А вот за границей несколько другая ситуация: gs.statcounter.com

                                              У оперы 1.92%. Отдельно в USA 0.63%.

                                              У того же IE6 существенно большая доля…
                                                0
                                                Весь вопрос в трудозатратах. Для 99,5% пользователей нужно было сделать весь сайт, а еще для 0,5% всего лишь не затупить при написании конфигов. Имхо, трудозатраты на пользователей Оперу намного ниже.
                                                –1
                                                А что, опера уже найчилась поддерживать стандарты?
                                                Хотя бы CSS1?
                                              +4
                                              Ни разу не сталкивался с подобной проблемой в asp.net.
                                              Возможно, эти сайты на какой-то одной cms или используют какую-то библиотеку стороннюю…
                                                0
                                                Firefox 3.7 альфа выдаёт такую же ошибку парсинга на всех трёх приведённых примерах. Дело тут не в браузере, а в кривом XML.
                                                  0
                                                  Уже выяснили, что сервер пытается отдать страницу как XML любому браузеру, который не знает.
                                                    +1
                                                    «Который не знает» что? Или имеется ввиду «которого не знает»?
                                                      0
                                                      Вы ошибаетесь, ASP.NET 2.0 знает Оперу. Можете проверить браузерные конфигурации. ASP.NET 2.0 знает Оперу до версии 9. ASP.NET 4.0 знает до 10й.
                                                        –1
                                                        Дело не в «знает — не знает», дело в том, что отдает кому-то заведомо ложную информацию.
                                                          0
                                                          Я отвечал Volshebnyi, он ошибся. Для его информации я написал прошлый коментарий.

                                                          Теперь отвечаю вам. Сервер никому ложной информации не отдавал. Там действительно XHTML и действительно должно быть application/xhtml+xml. Другое дело что разработчики сайтов набакапорили в разметке и скриптах.
                                                            –1
                                                            Должно? Это вы как определили? Мне видится, что в какой-то момент разработчики заколебались с этим xhtml+xml и перенастроили, чтобы отдавался text/html. Только чегото недонастроили.
                                                    +1
                                                    Плохо, что Опера не читает Html документ названный в русской транскрипции «страничка.html»
                                                      +1
                                                      называть файлы с использованием не-ascii символов — извращение…
                                                        +1
                                                        Я согласен с вами. Но современный мир с разными людьми вносит свои коррективы. Например, мне лень вводить своё название на английском при сохранении страницы. Потому я решил расширить парадигму своего мира))) и не быть столь критичным.
                                                          +1
                                                          Почему это?
                                                            0
                                                            Потому что нет никаких объективных причин для того чтобы это делать, с другой стороны не-ascii в названии может создать множество разнообразных проблем. К примеру на компьютере где вы создали эту страничку кодировка cp1251, а на сервере куда вы её загрузили стоит старая фря и русский язык там декодируется через koi8-r.
                                                            К тому же браузерам получается нужно понимать все возможные кодировки в названиях, непонятно только каким образом. DOCTYPE там не проставишь…
                                                              +2
                                                              Большинство людей в России английского не знают, так что объективная причина — в интернет всё больше выходит простых людей, в нём всё меньше гиков.

                                                              Не надо создавать страницу в cp1251 и koi8-r. Используйте UTF-8. Мы все хотим перестать поддерживать IE6, так давайте и старые кодировки постепенно выбрасывать на помойку.
                                                                +1
                                                                >> Большинство людей в России английского не знают, так что объективная причина — в интернет всё больше выходит простых людей, в нём всё меньше гиков.

                                                                Ээ и по этому поводу нужно называть _файлы_ русскими символами? Какое вообще дело большинству людей как у вас странички на сервере называются?

                                                                И кстати «используйте utf-8» тут немного не в тему т.к. не зависит от пользователя. winxp хранит названия файлов в cp1251. Равно как и неподконтрольный вам сервер может держать их в любой угодной ему кодировке, какую там администраторы поставят, более того — если это какой нибудь забугорный шаред-хостинг то там может вообще не быть поддержки кириллицы, как класса.
                                                                  0
                                                                  WinXP не хранит в cp1251, это я как любитель европейской музыки с умляутами говорю.

                                                                  Вообще, двадцать первый век на дворе, а вы про ascii говорите. Из-за этого ascii сорок лет страдали все, кто не американцы.
                                                                    0
                                                                    Хм. Ну вообще оно хранит _кирилицу_ в cp1251. Насколько я знаю. Европейские символы — в cp1252. И т.д.
                                                                    К примеру монтируя самба-шару winxp машины приходится указывать iocharset=cp1251 дабы видеть русские символы в названиях файлов.
                                                                      0
                                                                      Скорее всего, это ограничение протокола. Педивикия говорит, что NTFS хранит имена в Unicode, а вот в SMB юникод стал обязательным только начиная с версии 2 (в Висте).
                                                                        0
                                                                        Интересно, как WinXP у меня на компе файлы с названиями на японском хранит? С однобайтовой-то кодировкой.

                                                                        Хранит кодировку для названия каждой папки? Бред.

                                                                        Скорее конвертит названия в win-1251 для передачи по сети.
                                                                      0
                                                                      А вот по хостинг правда ваша, униховые админы до сих пор koi8-r любят.
                                                                        +1
                                                                        NTFS хранит все данные исключительно в UTF16. В XP файловая система — NTFS. Все данные по инету по-дефолту летают в UTF8. Причин использовать 1251 не существует.
                                                              0
                                                              Как решение проблемы со стороны браузера можно предложить давать пользователю возможность нажать на кнопку «попробовать открыть страницу как HTML», потому что судя по всему на подобный сайт может попасть любой рано или поздно.
                                                                +2
                                                                Ссылка есть, написано до ката. На каждой странице нажимать раздражает.
                                                                  +1
                                                                  Простите, не заметил.
                                                                –11
                                                                Странно по стандарту XHTML должен возвращаться как application/xhtml+xml (http://www.w3.org/2003/01/xhtml-mimetype/), тоесть Опере вернули по стандарту в соответствии с заголовком документа. Вернули немного не валидный ХМЛ и Опера сдохла. Просто интересно, а че Опера неможет включить мозг и попробовать хоть чето показать?
                                                                  +1
                                                                  опера и спрашивает отображать как html или нет, а автоматические отображения не нужны.
                                                                    –2
                                                                    Ну судя по этому посту, таки нужны. Ведь нам надо не проверить страничку, а посмотреть ее.
                                                                      0
                                                                      Об этом вы можете поспорить с W3C. Если не уверены, что сможете всегда отдавать валидный xml, не обманывайте браузер.
                                                                        –3
                                                                        Я понимаю что со «включенным» мозгом сложно понять что от ошибок никто не застрахован… Вы никогда не ошибались? Ну оишбились разработчики сайта в разметке. В чем проблемы? Напишите разработчикам сайта (што набакапорили), напишите разработчикам Оперы (што с енкодингом они релизовали попытки, а с ХМЛ не могут, напишите разработчикам ASP.NET (какого хрена они FF отдали text/html). Че я буду спорить то? Я не пользуюсь Оперой. Мой браузер эти странички показывает на раз два три.
                                                                          –1
                                                                          Я понимаю что со «включенным» мозгом сложно понять что от ошибок никто не застрахован…
                                                                          Я не понимаю, в чем проблема. Есть режим, в котором ошибки допускаются, и есть в котором не допускаются. Если у вас система сама страничку в строгом xml строит, можете поставить второй. Если вы сами все время руками в коде лазите, второй режим не для вам. Ошибиться тут можно только один раз с выбором режима.
                                                                    +9
                                                                    По стандарту браузер должен на xml демонстрировать отсутствие мозга и падать на первой же ошибке. Если браузер пытается что-то показать из сломанной xml разметки, то он не поддерживает xml.
                                                                      +6
                                                                      Помоему мозг нужно включить вам. Вопервых версия XHTML 1.0 отличается от версии XHTML 1.1 строгим соответствием xml. Вовторых доктайп тут вообще не при делах. Парсить документ как xml или как html браузеры (по крайней мере современные) решают на основе контент-тайпа. Ну и в третьих, документ не может быть немного невалидным, либо валидный, либо нет.
                                                                        +1
                                                                        версия XHTML 1.0 отличается от версии XHTML 1.1 строгим соответствием xml


                                                                        Что это означает?
                                                                          0
                                                                          Когда-то слышал что XHTML 1.1 обязан быть в строгом xml, в том числе с соответствующими заголовками. Но сейчас поискал информацию, не нашел об этом упоминания. Зато часто встречается информация, что в XHTML 1.1 есть только Strict-режим. Теперь сомневаюсь, возможно я ошибся, или человек, от которого я это слышал.
                                                                              0
                                                                              А, Вы не в курсе.

                                                                              Во-первых, все версии XHTML обязаны быть конформным XML. Во-вторых, W3C не рекомендует отдавать XHTML 1.1 как text/html, но разрешает делать это с XHTML 1.0. В-третьих, у XHTML 1.1 просто нет версий Transitional и Strict, у него одна версия; метафорически её можно называть Strict, да.
                                                                          +1
                                                                          > Вернули немного не валидный ХМЛ

                                                                          По секрету: невалидный XML в ситуации с application/xhtml+xml — это уже просто куча текста. Так что либо валидный, либо до свидания.
                                                                            0
                                                                            По секрету вам скажу, Опера большую часть документа парсит и даже качает всякие там скрипты да картинки. А потом уже на скрипте обламывается. Я думаю из этого не сложно сделать вывод что Опера понимает «просто кучу текста» (ну или часть ее).

                                                                            Ктомуже я еще раз подчеркну. Эти странички для людей, а не для браузеров. Я хочу увидить страничку, а не провалидировать ее.
                                                                              +2
                                                                              Ага, т.е. в ситуации, когда страница, например, написана в UTF-8, а отправлена с заголовоком win-1251 и отобразилась кракозябрами — тоже браузер виноват? Судя по вашим рассуждениям, именно так.
                                                                                0
                                                                                Естественно, собсно браузеры эту проблему решают. Даж ваша Опера. Иногда можно заметить что страничка показывается кракозяблами, а уже потом нормально. Сайтов с такой ошибкой все меньше и меньше (до недавна примером такой страницы была https://ibank.aval.ua/index.html, но щас судя по всему пофиксили).

                                                                                Я откровенно говоря не понимаю что вас так возбуждает… Я просто хочу смотреть странички. Если у яблока надпорченный бок, ненадо выкидывать все яблоко, я скушаю то что осталось. Если в машине сломалась автомагнитола, то не надо меня катапультировать, я вполне поезжу без автомагнитолы!

                                                                                Страничку можна распарсить, и Опера это делает. Она не может распарсить только кусочек з javascript-ом.

                                                                                П.С. Я уверен что Опера хендлит десятки ошибочных ситуаций. И я уверен что эту проблему Опера тоже пофиксит.
                                                                                  0
                                                                                  Страничку можна распарсить, и Опера это делает.
                                                                                  Почему вы говорите только об Опере? Другие браузеры поступаю точно также при получении заголовка xhtml+xml.
                                                                          –5
                                                                          Я вообще не понимаю что заставляет россиян пользоваться оперой? Хороший браузер конечно, но и все остальные хорошие, особенно радует хром.
                                                                            0
                                                                            Хром неюзабелен. Мне встречалось всего два удобных в управлении и достаточно шустрых браузера — опера и uzbl
                                                                            • UFO just landed and posted this here
                                                                                0
                                                                                UZaBLe

                                                                          Only users with full accounts can post comments. Log in, please.