1. JavaScript / Говнокод #2913

    +169.4

    1. 1
    if (!jQuery) $('<scr' + 'ipt src="/jquery.js" type="text/javascript"></scr' + 'ipt>');

    Запостил: eval, 01 Апреля 2010

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

    • А зачем конкатетация-то?
      Ответить
      • Если это инлайн-скрипт (т.е. внедрённый в HTML), некоторые браузеры могут воспринять закавыченный тег </script> как конец скрипта. Конкатенация - простой костыль, устраняющий это дело.
        Ответить
        • Понял, спасибо.
          Ответить
        • Такого не может быть, чтобы браузер воспринял строку как закрывающийся тег
          Ответить
          • Древние браузеры с примитивными парсерами ещё как могут.
            Ответить
            • IE4? :)

              Здесь не для этого делали разрывы. Для чего не знаю, но не для этого
              Ответить
          • Браузер сначала парсит HTML, а уж затем скрипты и стили. Поэтому
            <script>alert('</script>')</script>

            выведет только "смайлик"
            Ответить
            • Действительно. Три браузера так и сделали
              Для обхода можно пойти на небольшую хитрость
              <script>alert('<\/script>')</script>
              А вот с другими тегами таких глюков не замечал
              Ответить
              • Вид костыля непринципиален, хотя некоторые весьма доставляют. К примеру, document.write(unescape('%3Cscript%3E... (видел несколько раз в реализациях рекламных баннеров и счётчиков).
                Ответить
            • Так уже работает правильно
              <script>
              <!--
                alert('</script>')
              //-->
              </script>
              Ответить
    • Экономия на спичках.
      Ответить
    • Кажется, это фейк (см. на дату) Но все равно забавно ))
      Ответить
    • А не так надо было?...
      if(!jQuery)
        document.getElementById('some_div').innerHTML = '<script> /*ну и так далее*/';
      Ответить
      • Не, тогда бы сработало.
        Ответить
      • Если jQuery не подключен, то при обработке условия возникнет ошибка. Нужно проверять через !window.jQuery
        Ответить
      • Скрипты через InnerHTML не подключаются. Низачет.
        Ответить
    • а кто тогда $ если не джиквери?
      Ответить
      • очевидно, алиас для document.write или вроде того
        Ответить
      • В Prototype, например, $ - это слегка апгреженный аналог document.getElementById ($('foo') означает то же, что $('#foo') в jQuery, плюс можно передать массив идентификаторов и на выходе получить смежный массив ссылок на объекты). В других фреймворках я ковырялся лишь мельком, но функции, начинающиеся на $, тоже встречал. Однако в любом случае данный пример сильно смахивает на синтетический, поскольку $ используется чисто по-jQuery'евски.
        Ответить
        • в каком месте он смахивает на чисто jQuery пример?
          в jquery такая конструкция создаст DOM ноду script, но использоваться в данном случае она нигде не будет.

          Надо просить автора показать, где он нашел это чудо
          Ответить
        • Вряд ли там смешаны разные фреймворки. Иначе конфликт неизбежен.
          Ответить
          • Конфликт избежен!
            есть jQuery.noConflict() - и тогда можно юзать jq и prototype вместе...
            Ответить
    • Я так понял, что это не говнокод...
      Ответить
      • Это шизокод. Если это проверка на наличие jQuery, тогда !jQuery не работает, ибо кидает ошибку. Еслт это проверка на jQuery == false(null и т.д.), тогда накой ляд такая проверка
        Ответить

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