MooTools — AJAX + document.write

    Наконец кто-либо из «библиотек-гигантов» решил внедрить корректную обработку document.write при использовании AJAX. MooTools Core Dev Thomas Aylott демонстрирует алгоритм переопределения document.write.

    Использование данного алгоритма позволит в AJAX осуществлять подгрузку HTML страниц со скриптами содержащими document.write. Такими могут быть страницы с Google AddSense, страницы содержащие JavaFX, другие.

    Из анализа алгоритма вытекает, что корректная обработка возможна только не очень сложных комбинаций с ипользованием document.write. К примеру, об варианты


    document.write('<script ');
    document.write('src="test.js" ');
    document.write('</script>');

    и

    <script>document.write("<select>");</script><option>A<option>B</select>

    предложенный алгоритм «сломает зубы».

    Но, все таки, это уже лучше чем ничего. Надеемся со временем добавится возможность обработки более сложных ситуаций.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 78

      –2
      поздравляю всех пользователей mootools
        +1
        уж лучше бы они на производительности сосредоточились…
          0
          у мутулза что-то не так с производительностью? свамп?)
            0
            да, и сильно не так. Тот же jQuery в разы шустрее
              0
              на каких задачах?
                +1
                выборка элементов, обслуживание событий, изменение DOM
                  +1
                  кстати, недавно автор мутулза писал статью с сравнением мутулза и жиквери — мне лично очень понравилось первое сравнение — позиционирование фрэймворков самими авторами — мутулз для написания аккуратного яваскрипта, а жиквери — для обхода и манипуляции с домом. мне кажется достаточно четко
                  • НЛО прилетело и опубликовало эту надпись здесь
                      0
                      он огромен. сомневаюсь что когда-либо выпущу его с домашней машинки в продакшн
                      • НЛО прилетело и опубликовало эту надпись здесь
                          –2
                          для ria есть flex
                            –4
                            flex это уже flash. Ext с этим хорошо справляется.
                            • НЛО прилетело и опубликовало эту надпись здесь
                              –1
                              +1, мне он именно за это нравится и именно по-этому его использую, жаль платный.
                              –1
                              у меня админка к бэкэнду полностью на нём написана.
                            +5
                            Чтобы писать аккуратный Javascript не нужен framework. Нужно просто аккуратно его писать :)
                            • НЛО прилетело и опубликовало эту надпись здесь
                                +2
                                Видимо имелся ввиду jqueryvsmootools.com. Я бы это мусором не назвал. Вполне неплохой обзор.
                                  0
                                  сравните

                                  jQuery is a fast and concise Javascript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write Javascript.

                                  MooTools is a compact, modular, Object-Oriented Javascript framework designed for the intermediate to advanced Javascript developer. It allows you to write powerful, flexible, and cross-browser code with its elegant, well documented, and coherent API.

                                  думаю пояснять откуда эти тексты взяты необходимости нет
                                  • НЛО прилетело и опубликовало эту надпись здесь
                                      0
                                      то, как сами авторы позиционируют свои разработки. если вам эти тексты кажутся одинаковыми, мне придется применить мицголизм
                                      • НЛО прилетело и опубликовало эту надпись здесь
                                          0
                                          глупыми оскорблениями вы вряд ли чего-то добьетесь. учитись общаться культурно — пригодится в жизни.
                                          0
                                          Это же простой маркетинг. Один надавил на одно, другой на другое, а по сути задачи-то они решают одни и теже. Разная идеология и стиль, поэтому они и существуют.
                                    –1
                                    специально для вас :)

                                    ejohn.org/blog/classy-query/
                                –1
                                меня в жиквери смущает неочевидность результатов методов $ объекта. в мутулзе и прототайпе как-то аккуратнее.
                                  –1
                                  да, аккуратнее, но зато памяти жрет поболее и выполняется дольше. А так — да, все красиво и гладко.
                                    –1
                                    насколько я понимаю, в жиквери не расширяют прототип дом элемента. из за этого везде лепят $(element). так? и тормозить должно только в ослике, который прототипы для дом элементов не понимает.
                                      –1
                                      угу, а ослик — 50-70% пользователей… В этом-то и проблема: разработчики выбирают то, что им удобнее, а страдают из-за этого всего пользователи.
                                        –1
                                        тут мне уже нечего сказать
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                      +1
                                      странно, я jQuery отчасти как раз за это и люблю — за возможность работать с абстракциями, соответствующими селектору, а не с конкретными DOM-элементами.
                                        0
                                        я начал писать js когда еще не было прототайпа — мне кажется расширение дома более выгодной моделью
                                          0
                                          «более выгодной» в каком плане?
                                            0
                                            в плане возможностей для написания жаваскрипта
                                              0
                                              это как?)

                                              мне, например, нравится jQuery именно своей расширяемостью. нет другого фреймворка, куда можно так легко встраивать свои расширения :)
                                                0
                                                ерунда. никто не мешает делать Element.extend({ myExtension: function(){} });
                                                на выходе — аналог jq плагина $.fn.myExtension = function(){};

                                                даже синтаксис получается похожим
                                                moo — $('div').myExtension();
                                                jq — $('#div').myExtension();

                                                но в jq постоянно задалбывает, что нужно лепить # для выборки по id.
                                                  –2
                                                  по мне так больше задалбывает необходимость оборачивать каждый елемент в $ для вызова жиквери фукций.
                                                    +2
                                                    ну это тоже надуманая проблема
                                                    никто не мешает сохранить ссылку на выборку и работать с ней
                                                    var $element = $(element);

                                                    $element.addClass('mooo');

                                                    и это хорошая практика, потому что не тратится время на повторное заворачивание элемента в jq обёртку.
                                                      –2
                                                      так в нормальных браузерах заворачивания не должно быть — в яваскрипте прототипы.
                                                        +1
                                                        комрад, это неверное утверждение. никто ничего не должен. отстутствие лишних методов для элементов DOM — это по своему не плохо. экономит память, например. а доля «нормальных браузеров» слишком мала. нужно просто осознать, почему так сделано и жить дальше :)

                                                        споры на тему, «вот моя хрень лучше вон той хрени, потому что...» ни к чему не приведёт :) везде есть свои плюсы и минусы, идеологическая подоплёка и бла бла бла.
                                                          –1
                                                          доля нормальных браузеров вроде как больше половины уже. а насчет расхода памяти — надо проверить, но есть у меня подозрение, что кол-во методов драматического увеличения в памти не даст.

                                                          почему бы и не поспорить — в этот раз все вроде культурно и мирно проходит
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                            0
                                                            неверное предположение
                                                              0
                                                              откуда такая категоричность? и при чём тут размер проекта? :) например, все проекты ТМ используют мутулз. и это круто!

                                                              поверь, но это очень удобно, когда весь функционал фреймворка доступен сразу.
                                                              • НЛО прилетело и опубликовало эту надпись здесь
                                                                  0
                                                                  он ровно такой, чтобы решать поставленые задачи
                                                                  можно пример с действиетельно сложным js? инетересно посмотреть
                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                      0
                                                                      когда не ловишь эксепшены, можно сделать откровенную херню и никогда об этом не узнать.
                                                                      что тут хорошего?
                                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                                  0
                                                                  у ТМ достаточно коряво многие вещи сделаны
                                                            0
                                                            а приведите пример, когда Вам бы понадобилось оборачивать элемент в $?
                                                              –2
                                                              затрудняюсь — на жиквери кода нету уже очень давно
                                                                0
                                                                я к тому спросил, что такой необходимости фактически нет. это применение идеологии prototype к jquery, что абсолютно неверно, потому что они принципиально разные.
                                                            0
                                                            вас спасёт )
                                                            var $id = function(id)
                                                            {
                                                            return $('#' + id);
                                                            };


                                                            а вообще, мне наоборот, нравится единообразие синтаксиса CSS и $.
                                                      0
                                                      А мне так не кажется, и что? Где аргументы? Или вы авторитетом давите «я начал писать js когда еще…» :) Давайте не разводить holy war.
                                                        0
                                                        при чем тут холивар — «мне кажется» — мое субъективное мнение
                                                      • НЛО прилетело и опубликовало эту надпись здесь
                                                          0
                                                          какую ошибку?
                                                            0
                                                            кстати, у jQuery есть также некая устойчивость…

                                                            например, можно выполнять операции над пустым множеством без ошибок.

                                                            например, когда нет элементов по указанному селектору.

                                                            Полезное свойство, например, для кода выше, если поле login существует только для неавторизованного пользователя.
                                                              0
                                                              «Полезное свойство, например, для кода выше, если поле login существует только для неавторизованного пользователя.» — такие вещи вообще нежелательно выполнять на клиенте если они там у этого пользователя не должны выполняться…
                                                              ну а то что они возвращают всегда пустые коллекции если ничего не найдено это на мой взгляд большой плюс… но в прототайпе метод $ возвращает не коллекцию а конкретный элемент… это альяс для getElementById() не надо его сравнивать с методом $ в jquery… они разные по назначению… сравнивайте тогда $$ прототайпа…
                                                                0
                                                                как показывает практика, метод $ в Prototype вообще стоило выкинуть, заменив его методом $$ ;)

                                                                работать с коллекциями однозначно удобнее.
                                                                –2
                                                                выше, где я писал про аккуратные скрипты имел ввиду как-раз такие возможности жиквери. это как в пыхпых отключить показ ошибок и все вызовы с @ начинать (кстати распространенная практика)
                                                                  0
                                                                  иногда такая устойчивость приводит к тому, что мозг отключается :)
                                                                • НЛО прилетело и опубликовало эту надпись здесь
                                                                    –1
                                                                    @mysql_connect, чего уж там
                                                                    • НЛО прилетело и опубликовало эту надпись здесь
                                                                  +1
                                                                  вы видимо с мутулзом слабо знакомы
                                                                  код $$('#login').addEvent('click',… будет вести себя практически так-же как ваша строка на жиквери. но так на мутулзе обычно не пишут.
                                                      0
                                                      Интересное решение. Если бы я столкнулся с такой проблемой, то решил бы её через фрэйм: в скрытом фрэйме как в песочнице формируем задуманный контент страницы, затем перемещаем его в основной документ. Скрипты выполнились бы дважды, но обычно это не создст проблем. Хотя и document.write используется крайне редко. Теперь буду знать что лушче его не использовать, вдруг кто-то захочет мою страницу подгрузить к себе и огребет гемороя.
                                                      Из своей практики сознательного js, единственный раз когда использовал document.write — вставка банера. Хотя наверно есть другой способ вставить элемент в том место где стоит <script> </script>

                                                      Удивительно что все кто оставили комменты рассценили поняли топик как «В Муу добавили финтифлюшку, он стал нереально крут»
                                                      Если пользователям jq стало завидно, могу помочь адоптировать эту штуку для jq, хотя я в нем мало разбираюсь
                                                        0
                                                        использование в таком случае iframe тоже несет многие неудобства, к примеру область видимости уже созданных переменных в JS, вообщем я думаю что решение с переопределением document.write в данном случае более преимущественно.

                                                        Если будет желание портировать функцию переопределения document.write под jQ советую портировать алгоритм из библиотеки Fullajax, он более универсален и решает проблемы с указанными в статье примерами.
                                                        +1
                                                        Эти крутые парни считают ОО подход для ЖС избыточным video.yahoo.com/watch/1041101/3881103

                                                        А вапще тайтл читается как мутулз убрали аджакс но добавили документ врайт ))
                                                          0
                                                          по ссылке 50-ти минутное видео + оно не перематывается :). хоть бы суть немного описали
                                                            0
                                                            Тут семиметровая презентация
                                                            josephsmarr.com/papers/Smarr-OSCON-2007.ppt
                                                          0
                                                          Поправьте меня, если я не прав, но это — как раз некорректная обработка. Корректная, это та, что определена стандартом (и по случаю реализована во всех браузерах).

                                                          Переопределять стандартные методы, которые ведут себя правильно на «что-то другое», тем более на такое, что и не работает-то почти — отличная дорога к дестабилизации системы и усложнению ее [возможной] интеграции. Вспомните известную проблему в prototype.js, связанную с переопределением в етой библиотеке глобального обьекта Element.
                                                            0
                                                            поправляю, они добавили работоспособность данной функции там где она не работала, после того как формирования DOM законченно. если использовать после закрытия DOM document.write весь контент страницы затирается, вообщем обычный document.write и AJAX по умолчанию не совместимы.
                                                              0
                                                              подмена стандартной реализации метода на что-то, что ведет себя по-другому (более того, оно ведет себя не всегда) есть неправильно, ИМХО
                                                                0
                                                                вы поймите, вы сейчас мыслите по шаблону, включите соображаловку — после того как законченно формирование DOM функция document.write — мусор, ее невозможно использовать, она мертва, а тут появляется вторая жизнь. переопределение этой функции как раз и идет после того как DOM сформирован. что тут неправильного?
                                                                  0
                                                                  sirus, ну зачем вы спорите? :-) Ну не в курсе человек, что иногда требуется не просто отправить «вэб-дванольную» форму, но и еще произвести некоторые манипуляции с оставшейся перед физиономией посетителя страницей.

                                                                  ilinsky, та проблема с Element-ами былв просто незадокументаминентированной фичей. Но, нужно отдать должное авторам prototype — они благодаря этой «фиче» предвосхитили многие возможности других JS-фреймворков в плане нормальной работы возвращаемых после AJAX-запроса построения DOM.

                                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                          Самое читаемое