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

    +152

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function init() {
      
        if (!document.body) return;
     
        var body = document.body;
        var html = document.documentElement;
        // ...
    }
    // ...

    https://gist.github.com/galambalazs/6477177/

    Плавный скролл, я вот только не пойму, почему "if (!document.body) return;"?
    Типа <body> тэга может не существовать?!

    Запостил: volter9, 01 Октября 2014

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

    • Может. Если скрипт уже начал исполняться, а документ ещё не до конца загрузился.
      Ответить
      • Возможно, а о window.addEventListener('DOMContentLoade d', function () {/*...*/}); не знают?
        Ответить
        • Посмотрел весь исходник. Автор, вероятно, решил сделать проверку на браузеры, не поддерживающие DOM, чтобы пятая строка фрагмента не вывалила исключение.

          Только где же в 2014 году найти такой браузер?
          Ответить
          • Может у него IE 4 и Windows 2000?
            А читал истории про студентов которые учились писать JS специально доя таких динозавров, как Вы думаете? Это так?
            Ответить
          • Server side.
            А вообще, хотя бы, if ( !document.body ) setTimeout( callback, ннадцать_мс );
            Ответить
      • <!DOCTYPE html>
        <html>
        <head>
        <title></title>
        <script type="text/javascript" src="jquery-2.1.1.js"></script>

        <script type="text/javascript">
        $(document).ready(function(){
        console.log(document.body);
        });
        </script>

        <script type="text/javascript">
        (function(){
        console.log(document.body);
        })();
        </script>

        </head>
        <body>

        <script type="text/javascript">
        (function(){
        console.log(document.body);
        })();
        </script>

        </body>
        </html>
        Из-за замыкания функция вызывается сразу, когда начинается загрузка страницы, объект body еще не существует на этапе вызова функции.
        По теме. Body может вовсе отсутствовать http://htmlbook.ru/html/frameset но это все лирика.
        Ответить
        • Ну да, если пихать скрипт в head и смотреть body, то его ещё нет, но в body он уже будет.
          А вообще, в каких-то браузерах body и head в document не было, надо было тащить через селектор.

          PS:
          window.open("data:text/html," + $("#comment-250203 .entry-comment").text().replace(/\s+/g, " ").replace(/<\/html>.*/, "</html>"));
          Ответить
          • Тот первый скрипт, из head, в котором есть document.ready найдет body, DOM уже построен будет. Это в каких таких браузерах?)
            Наверное в ранних версиях IE.
            Ответить
            • вот только насколько я помню, jquery 2.0 поддерживает минимум ie9
              Ответить
              • Jquery 2.0 не нужен.
                Ответить
                • ie6-8 не нужны. Но живы, к сожалению. Из-за XP.
                  Ответить
                  • XP жив?
                    Ответить
                    • Что общего у Ленина, Цоя и Windows XP?
                      Ответить
                      • Вот почему бы этим радикалам не памятники Ленину сбрасывать, а ходить по домам и обновлять XP (и Хром за одно ставить)?
                        Ответить
                        • Во-первых, XP нечем заменить (кроме другой операционки) хотя бы потому, что бесплатно MS новые версии не раздаёт.

                          Во-вторых, новая Винда встанет не на любое железо (ну не ставить же Линукс, как бомжи какие-то).

                          В-третьих, Хром не нужен.
                          Ответить
                          • А кто, простите, нужен?
                            Ответить
                            • Нужно всё, что можно использовать по назначению. Хромом даже другой браузер качать неудобно, уж лучше по FTP.
                              Ответить
                              • Ну остается пожелать тебе серфить инет с помощью FTP, делать AJAX curl-ом и выполнять JS на калькуляторе. Да! И рендерить страницы карандашом на листке в клеточку :D
                                Ответить
                              • > уж лучше по FTP
                                Gopher же
                                Ответить
                                • Через Gopher неудобно качать файлы пачками, потому что нет подходящего клиента.
                                  Ответить
                          • > бесплатно MS новые версии не раздаёт
                            А XP раздавала? :)
                            Ответить
                          • > новая Винда встанет не на любое железо
                            И слава богу... А то недавно пришлось с болью в сердце смотреть, как над компом с 256 метрами оперативки издеваются Антивирус, 1С и Браузер...

                            Зато XP на нем идет, да. Только толку от нее, если работать на таком компе всё равно невозможно?
                            Ответить
            • > Тот первый скрипт, из head, в котором есть document.ready найдет body, DOM уже построен будет.
              Это с какого перепуга? Он же выполняется немедленно. Запусти и проверь - первый скрипт выводит null.
              http://learn.javascript.ru/traversing-dom#корень-documentelement-и-body
              UPDATE: Невнимательно прочитал. Да, тот, который на ready, найдёт, а тот, который без - нет.

              > Это в каких таких браузерах?)
              Вроде IE старые.
              document.body = document.body || document.getElementsByTagName('body')[0];
              Ответить

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