1. Куча / Говнокод #12364

    +129

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    <style type="text/css" media="all">
    <!--
    @import url("files/style.css");
    -->
    </style>

    Я чего-то не понимаю?

    Запостил: Stud, 26 Декабря 2012

    Комментарии (47) RSS

    • Классическая защита от скачивания стиля wget'ом или другими роботами.
      Ответить
      • А если робот будет умнее?
        Ответить
        • А робот всяко будет умнее, т.к. ему поможет человек разумный.
          Ответить
    • Я тоже чего-то не понимаю. Если робот и выкачает CSS, то что в этом страшного?
      Ответить
      • может в тескт напихали кучу ключевых слов. но с помощью css они становятся невидимыми. SEO такое SEO
        Ответить
        • такие финты даже поисковые роботы раскусывают и удаляют из выдачи "за дерзость"
          Ответить
    • Какой браузер не знает тегов style и script? То ли в каком-то стандарте, то ли в пояснениях к нему читал, что обрамлять код комментарием жуть как устарело, невалидно и вообще.
      Ответить
      • Ну а вдруг придёт Люр и взломает матрицу?
        http://govnokod.ru/10067
        Ответить
        • Комментарий не спасает. В браузер выводится всё равно.
          Ответить
      • Даже если обрамлять, то это не так делалось:
        //<!--
        code
        //-->
        для скриптов, чтобы интерпретатор скрипта не поломался, а вот для КСС - вроде как комментарии бывают только /* */, т.е. нужно было бы
        /*<!--*/
        style
        /*-->*/
        Но тут возникают еще более глубинные проблемы, т.как по необъяснимым причинам в комментариях нельзя два переноса подряд, и что-то типа:
        /*<!--*/
        body { background-image: url("--.jpg") }
        /*-->*/
        разрушило бы весь феншуй автору.
        И тут можно было бы попытаться переделать в
        /*<![CDATA[*/
        body { background-image: url("]]>.jpg") }
        /*]]>*/
        и снова облом.
        И в итоге вернуться к предыдущему способу и заменять двойные переносы на %2D%2D или что-то в этом духе.
        Ответить
        • 1. Современные веб-браузеры, кроме IE, допускают и // для комментариев в стилях. Но с другой стороны, обрамление как раз и делают для говна мамонта, поэтому придётся заменять на /* */

          2. Вероятность появления конструкции "]]>.jpg" всё же меньше, чем двойного минуса.
          Ответить
          • if (a[b[5]]>3) { .. }

            Ну а в ксс да, маловероятно.
            Ответить
            • Кстати, как насчёт expression в IE? Или там массивы маловероятны?
              Ответить
              • Х.з. из меня вебмастер такой же как и балерина.
                Ответить
                • Как оказалось, в IE всё-таки возможно:
                  <html>
                    <head>
                      <script type="text/javascript">
                        var b = [1, 1, 1, 1, 1, 1];
                        var a = [4, 4];
                      </script>
                      <style type="text/css">
                        .first {
                          color: expression(a[b[5]]>3 ? "green" : "red");
                        }
                        .second {
                          color: expression(a[b[5]]>4 ? "green" : "red");
                        }
                      </style>
                    </head>
                    <body>
                      <div class="first">
                        Trololo
                      </div>
                      <div class="second">
                        Trololo
                      </div>
                    </body>
                  </html>
                  Ответить
        • Окей, допустим мы решили использовать комментарий. Для какого браузера это нужно? Или мы верим, что на наш сайт зайдёт кто-то с браузером двадцатилетней давности?
          Ответить
          • Код ОПа как бы не рабочий вообще, т.как комментарии будут восприниматься как часть текста стиля. Но более глубинная выгребная яма - это форматы ХТМЛ + КСС + жабоскрипт. А это так, одно из проявлений продуманного и без излишиств дизайна.
            Ответить
            • Так всё-таки. Пользователь какого браузера скажет нам спасибо, что мы закомментировали стили и скрипты?
              Ответить
              • Зависит от того, нужно было вообще это делать, или нет. Т.е. если в тексте КССа были ><&, то тогда желательно закомментировать, т.как браузеру станет плохо при парсинге, и он может переключится в какой-нибудь quirky режим, в которм он почти наверняка будет работать медленнее.
                Ответить
                • Допустим, ничего такого там нет. Всё максимально примитивно. То есть наша задача — угодить тому, у кого скрипт и css вылезет на страницу.

                  То, что хитропопые скрипты и css нужно особо писать — понятно, так как такие случаи разбираются стандартом и иногда ловятся валидаторами.
                  Ответить
                  • Ну так это как экранирование кавычек в строке - как тут можно однозначно ответить? Если есть кавычки - надо экранировать, если нет - то не надо. Тут просто осложнение изза того, что некоторые браузеры догадаются, что "программист" промахнулся, и поправят если что. И вот этой ситуации надо избегать.

                    Ну вот, например, комитет, который принимал стандарт по КСС3 просто был не в курсе, что КСС 3 будут использовать вместе с ХТМЛ, ну им просто забыли об этом сказать, вот поэтому они и придумали селекторы, которые случайно совпали с зарезервироваными символами ХТМЛя - ">". Теперь бедняги мучаются, не могут понять, как же так получилось, но поезд уже не остановить.
                    Ответить
                    • Ох :-) Ответьте, пожалуйста, на мой вопрос. Только на него.

                      Сейчас есть браузеры, которые не понимают тегов script и style вообще и вставят текст скрипта и css прямо на страницу? Если нет, когда примерно умер последний?

                      Именно эту проблему пытаются обойти, используя именно html-комментарии, а не сложную конструкцию из комментариев и cdata. Я спрашиваю только про это, больше ни про что ;-)
                      Ответить
                      • Перечитайте первое предложение в предыдущем ответе.
                        Ответить
                        • Ни в первом, ни в любом другом нет ничего про браузеры, не понимающие тегов. Есть про браузеры, которые понимают теги, но могут офигеть от сложного кода. Ладно, проехали :-)
                          Ответить
                          • Ну перечитайте еще раз, что ли... :|
                            Это не от конкретного браузера зависит, если в тексте есть зарезервированные символы - надо от них как-то избавлятся. Можно с помощью комментариев, можно с помощью сидататы. Если этого не сделать: какие-то браузеры поймут, что "ХТМЛ-программист" = мудак, и исправят за него, а какие-то могут и не понять, но даже те, которые поймут, выберут худшую с точки зрения производительности стратегию для отображения страницы (потому, что если верстальшик - мудак, то нужно принять меры, чтобы предвидеть всякого рода идиотизмы, которые он(а) придумали, а на это нужно тратить больше усилий, чем на то, чтобы парсить и отображать страницу в соответствии со стандартом).
                            Ответить
                          • Ну, на примере со строкой, предположим, у вас есть код:
                            var foo = "text"text";

                            Можно парсить в соотвествии с более простым набором правил, где парная кавычка закрывает строку. Но если это приводит к ошибке, то можно попытаться парсить дальше в надежде, что где-то дальше будет еще одна кавычка, после которой парсер вернется во вменяемое состояние. Вторая стратегия естесственно гораздо более затратная. И в зависимости от криворукости писателя может парсер и разберется, как исправить, а может и нет. И пытаться угадать, какой из браузеров как именно среагирует в нестандартной ситуации...
                            Ответить
                            • Господин wvxvw, я вижу, что вы в теме, и моих знаний достаточно, чтобы ориентироваться в том, что вы пишете. Но я спрашиваю совсем-совсем-совсем не про то. Есть древний браузер, скажем, Мозаик. Он не знает про скрипты. Он выведет внутренности тега "script" на экран. Если закомментировать — не выведет. Раньше, когда только появлялись браузеры, которые начали понимать css и javascript, начали обрамлять код того и другого html-коммментариями, чтобы древние браузеры не видели код, а новые видели.

                              Так вот, я и спрашиваю, есть ли современные браузеры, которые офигевают от тегов script и style и выводят их содержимое на экран.

                              Меня не интересует парсинг кода. Интересует, есть ли браузеры, которые просто не знают, что есть такая вещь, как CSS, и такая, как JavaScript.

                              В интернете можно встретить упоминание, мол, старые браузеры не знают конструкцию cdata, поэтому обрамим её комментарием // или /* */. А совсем древние вообще не знают про CSS и JavaScript, поэтому обрамим html-комментариями. Но никогда не пишут, насколько это старые браузеры, и нужно ли вообще этим заморачиваться. Я про это.
                              Ответить
                              • Не знаю когда точно, но естественно все такие браузеры повымирали.
                                Есть ещё текстовые браузеры, но они даже лучше обычных понимают, где какой контент надо скрыть, где что показать и как отформатировать.
                                Ответить
                            • И поправьте меня, если я неправ. cdata и любые махинации с комментариями не указывают ни на что html-парсеру. Это всё нужно либо старым браузерам, которые не знают про существование стилей и скриптов, либо для xml/xhtml. Для html же это всё абсолютно бесполезно, так как парсер и так знает, что внутри тегов — стили и джаваскрипт, и никакими комментариями нельзя подсластить неаккуратно написанный код: парсер либо сломается точно так же, либо точно так же проглотит.
                              Ответить
                              • Нет, не правильно. CData или комментарии можно использовать для того, чтобы экранировать зарезервированые символы HTML. Это не зависит от браузера, или версии. Наоборот, если этого не делать, то более примитивные браузеры с большей долей вероятности поломаются.
                                То, что какие-то браузеры не умеют отображать таг <script> правильно - это уже никого не волнует давно.
                                Ответить
                                • Можете привести пример html-кода, когда код внутри script поломает html-парсер, а внутри cdata — нет? У меня, похоже, сломан Гугл. Он рассказывает про явное указание cdata в xml/xhtml. Про html, вроде, молчит. Для меня про xml понятно, ведь там строгий парсер, который действительно споткнётся на первом зарезервированном символе. Но html — это же такая универсальная штука, в которой парсер и так знает, что внутри "script" и "style" должен быть код, поэтому ему, по идее, должно быть плевать на наши подсказки.
                                  Ответить
                                  • <script>var foo = "</script>";</script>
                                    Ответить
                                    • Премного благодарен!
                                      Ответить
                                    • Правда, у меня в обоих случаях парсер ломается. Поэтому пример неудачный вроде.
                                      Ответить
                                      • Хайлайтер местный тоже, кстати, подсветил тег в кавычках именно как html... Судя по всему раздела-то на сайте нет для HTML, а хайлайтер может в него.
                                        Ответить
                                      • Есть такой проект ACT-R, пытается смоделировать человеческое мышление. Вот, возможно, лет через десять (ну, это очень оптимистично), когда на восьмиядерные ксеоны будут смотреть как сегодня на пентиумы, этот проект встроят в браузеры для того, чтобы разгребать жабоскрипт (который нисколечки не изменится, и будет обратно совместим с наскальными фресками песчеры Альтамира), и вот тогда можно будет, наконец-то писать как угодно.
                                        Ответить
                                        • > и вот тогда можно будет, наконец-то писать как угодно
                                          Ждем плагин к подставить имя любимой IDE, в котором будет кнопочка "прочесть мои мысли и запилить прогу".
                                          Ответить
                                          • Ну ACT-R уже умеет играть в камень-ножницы-бумага и выигрывает у большинства людей... так что не за горами.
                                            Ответить
                                            • Хм, а разве камень-ножницы-бумага это не канонический пример игры, зависящей только от везения?
                                              Ответить
                                              • Нет, скорость реакции и качество обмана тоже влияет.
                                                Ответить
                                              • Ее можно имитировать выбрасывая рандомальные значения, но люди так не играют, там действуют всякие Байес-биас и другая черная магия, когда человек на основании того, что он помнит о противнике пытается подобрать такой ход, который бы отражал его представление о самом вероятном развитии событий. Т.е. если человек заметил, что противник склонен после бумаги выбрасывать камень, то может это использовать, или если заметил, что противник долго не выбрасывал бумагу, то опять же. Ну и наверное есть куча всяких "стратегий" в том смысле, чтобы предсказать каким именно образом поведет себя человеческая интуиция в такой ситуации. Человеческая интуиция, для каждого конкретного человека и обстоятельств почти наверняка не будет выдавать взвешеный рандом...
                                                Ответить
                                              • > зависящей только от везения
                                                Где-то совсем недавно читал, что человеки склонны выкидывать одну комбинацию чуть чаще, потому вторая будет выигрышнее. Навскидку не нашёл, в викижопии упоминания нет.
                                                Плюс, кмк, дальше начинает работать психология: подсознательный повтор прошлой позиции противника, угадывание по жесту или мышечным реакциям (что-то типа эффекта Умного Ганса), ну и попытки предсказания чисто умозрительного характера.
                                                С компами - хз, разве что только предсказание поведения противника.
                                                Ответить
                                              • http://www.youtube.com/watch?v=h9f3GSA9yfc
                                                :)
                                                Ответить
                                        • >> Вот, возможно, лет через десять (ну, это очень оптимистично), когда на восьмиядерные ксеоны будут смотреть как сегодня на пентиумы, этот проект встроят в браузеры

                                          Ну как, встроили?
                                          Ответить
                    • > КСС3
                      Тогда уж либо КПСС3, либо КТС3 Знаю, транслит, емакс и т.п.
                      Ответить
    • Для истории. Опять CSS, опять @import:
      http://govnokod.ru/5486
      http://govnokod.ru/5946
      http://govnokod.ru/10606

      Но этот пример всё же концентрированнее.
      Ответить

    Добавить комментарий