Новшества node-webkit версии 0.5.1

    Позавчера (27 апреля) из праведных недр интеловского Центра технологий с открытым исходным кодом (а это тот самый Центр, который hshhhhh обозревал неделю назад во блогозаписи «Печеньки для пингвина») вышла в свет новая версия движка node-webkit могучего объединения Node и WebKit (точнее даже не просто WebKit, а Chromium — и в дальнейшем, вероятно, Blink), обеспечивающего быстрое и бесхитростное создание GUI-приложений методами веборазработки (код на JavaScript с употреблением API от Node.js, а интерфейс на HTML да на CSS) под операционные системы Windows, Mac OS X и Linux.

    Новая версия имеет номер 0.5.1; на её основе нетрудно составить и запустить, например, вот такое окно:

    [скриншот]

    Одну из предыдущих версий node-webkit (0.4.1) мне довелось обозреть в начале февраля, а теперь на дворе конец апреля. Настала пора рассказать обо всех тех изменениях, которыми сопровождался выход версии 0.4.2, за нею 0.5.0, и затем 0.5.1 наконец. Рассказываю:

    • Крупнейшим из изменений стала поддержка распечатывания страниц: начала работу функция window.print(). К сожалению, дополняющая её возможность предпросмотра страниц в их печатном виде ещё не реализована (но это планируется в версии 0.5.2).
       
    • У объекта Window появилась новая функция capturePage(), позволяющая получить скриншот видимой в окне части страницы. Имеется пример.
       
    • С целью частичной защиты исходного кода появилась новая утилита nwsnapshot, обеспечивающая предварительную компиляцию указанного джаваскриптового файла в машинно-зависимый код, который можно распространять вместо исходного кода, если исходный код не хочется никому показывать.
       
    • Значок для макинтошевского системного лотка теперь может иметь альтернативное (активное) начертание. Также появилась поддержка сочетания клавиш «CMD» и «`» для перехода между окнами на Маках.
       
    • Элемент <input type="file">, который служит для вызова диалоговых окон открытия или сохранения файла, теперь можно снабжать атрибутом nwworkingdir, значение которого указывает тот подкаталог в файловой системе, где диалог должен начать работу. Таким образом, если программа правильно догадалась о том, где пользователь хранит свои файлы, то тогда пользователь оказывается избавлен от лишних усилий по облазыванию своей файловой системы.
       
    • Новая система безопасности предотвращает употребление кода Node.js страницами, загруженными в <iframe>, когда элемент <iframe> снабжён атрибутом nwdisable.
       
    • Специальные усилия предприняты для того, чтобы приложение из <iframe> не могло вылезти наружу и занять всё окно целиком. Во-первых, игнорируется заголовок X-Frame-Options в заголовке HTTP-отклика. Во-вторых, если элемент <iframe> снабжён атрибутом с придуманным мною названием nwfaketop, то загруженная в <iframe> страница получает поддельные значения window.top, window.parent и так далее, чтобы не могла понять, что она находится во фрейме, и не могла вылезти из фрейма наружу.

    (Пока что получается, что в целях безопасности придётся указывать оба nw-атрибута: <iframe nwdisable nwfaketop src=""></iframe>. Это неказистое явление — временное; его планируют устранить в одной из будущих версий node-webkit.)

    Кроме того, обновлены обе основные составляющие движка: Node.js — до версии 0.10.5 (что видно и на вышеприведённом скриншоте), а Chromium — до версии 27.0.1430.0.

    Всем разработчикам, употреблявшим более ранние версии движка node-webkit, рекомендую без промедления обновить их на новую версию для большей безопасности, если работа приложения была связана с загрузкою недоверенных страниц во фреймы.
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 20

      +2
      Очень интересны два момента.
      Первый это какие сейчас различия между NodeWebkit и AppJS
      Второй это получилось ли у вас использовать node-sqlite3 под win x64 (у меня с этим трудности под виндой, поэтому пока использую встроенный websql)

      Тоже было забавно когда вышла версия 0.5 RC и не работал лог в консоли :).
        0
        С тех пор, как в октябре прошлого (2012) года я увидел (и изложил в послесловии к вон той блогозаписи), что движку node-webkit удалось обойти AppJS сразу по нескольким направлениям, я утратил интерес к AppJS и не следил за ним сколько-нибудь плотно. Допускаю, что за прошедшие с тех пор полгода разрыв мог и сократиться, но вряд ли существенно.

        Модуль node-sqlite3 я не собирал ещё под Windows x64: согласно README от node-gyp, для этого надобно Windows 7 64-bit SDK, а мне лень скачивать и ставить его.

        Однако сразу скажу, что для node-webkit этого и не нужно делать, потому что node-webkit тридцатидвухбитен, а не шестидесятичетырёхбитен. Для node-webkit я node-sqlite3 собирал успешно — кроме той последней версии, в которой тестирование ≈месяц назад перетащили с expresso на mocha, что само по себе прекрасно, но мне теперь все тесты, ранее для проверки node-sqlite3 под node-webkit работавшие, придётся переписать заново в моём форке. Потому что какой смысл собирать модуль, если его не в чем проверить.
          0
          К сожалению, только намучившись, даже под ubuntu не получилось использовать sqlite3. Приложение просто закрывается.
          Установил через npm — npm install sqlite3
            0
            В общем копал я копал и накопал. Не правильно делал: надо пересобирать не через node-gyp, а через nw-gyp (мой провтык).
            Последовательность действий для успешной установки модуля такая:

            Ubuntu / Debian
            cd /your/app/folder/
            
            — в одном уровне с node_modules
            sudo  npm install sqlite3
            cd node_modules/sqlite3
            

            sudo nw-gyp --target=0.5.1 rebuild
            
            — а теперь ключевое пересобрать пакет с учетом используемой версии node-webkit

            Windows
            Я парился со сборкой под ненавистной форточкой, плюнул :) нашел это (проверено на версии 0.4.1)

            https://github.com/zycbob/node-webkit-sqlite3-windows-demo
        0
        Сколько будет весить простое приложение «Hello, world!»?
        Если есть раскладка по платформам — отдельное спасибо.
          +1
          Вес «Hello, world!» (и любого другого простого приложения, занимающего считанные килобайты или десятки килобайтов JS+HTML+CSS) ничтожен по сравнению с весом самогó движка.

          Движок node-webkit, собранный под различные платформы, можно скачать из раздела «Downloads» на его гитхабовской странице, чтобы самостоятельно посчитать вес его.

          ZIP-архив node-webkit версии 0.5.1 для Windows занимает 23 973 968 байтов, в распакованном виде — 56 592 472 байта (включая утилиту nwsnapshot, которая для запуска приложений не нужна). В комментарии к прошлому обзору я упоминал, впрочем, что употребление UPX позволяет сократить объём основного исполняемого файла почти на два десятка мегабайтов, когда это необходимо.
            +1
            Для сравнения сообщу, что объём приложения «Hello Habrahabr!» (скриншот от которого приведён наверху) составляет 1 195 998 байтов, из которых:

            • 1 055 728 байтов — фотография заброшенной аллеи (фон окна),
               
            • 93 637 байтов — библиотека jQuery версии 1.8.3,
               
            • 39 047 байтов — код CSS (включая base64-кодированный шрифт заголовка),
               
            • 5 430 байтов — значок Хабрахабра (именно он показывается в заголовке окна),
               
            • 780 байтов — код HTML,
               
            • 226 байтов — код package.json (файл с описанием приложения для node-webkit).

            (Ещё 1 150 байтов занимает лишний файл со значком Node.js, который употреблялся в отладочных целях. Его давно пора было стереть, и сейчас сотру.)
          +2
          Сейчас занимаюсь разработкой приложения на node-webkit, и очень не хватает некоторых фич:

          1) Возможности не показывать иконку для некоторых окон приложения в доке MacOS (на панели задач Windows). Нужна эта фича для создания системы всплывающих уведомлений (родные вебкитовские просто не пашут)

          2) Не столь важная, но все же нужная мелочь — поддержка прозрачности у окон приложения.

          3) Система автообновления приложения. Вы описывали то, как она должна примерно выглядеть, на гитхабе. Жаль что таковой пока не появилось. (https://github.com/rogerwang/node-webkit/issues/233)

          Но самая главная — первая функция, без второй можно обойтись, третью — реализовать как-то самому. Очень надеялся на версию 0.5, но теперь придется ждать еще месяц-другой до 0.6, и надеяться что повезет там.
            0
            Всплывающие уведомления позавчера обсуждалися на Google Groups, и было сказано, что решение проблемы 251 существует, но только в отдельной ветви и только для Windows и Linux, а для Маков никто не сочинил ещё необходимого кода. Печально, но, видимо, и впрямь до лета никто не закончит решение этой проблемы.
              0
              Для мака проблема с иконкой в доке стоит не так остро (главное окно программы и окошки уведомлений группируются в одну иконку, и их даже не заметно). А вот с Windows XP — беда.
              –1
              О, а английский Мицгола мне нравится куда больше, чем русский.
              0
              Разрабатывая приложение на node-webkit наткнулся на баг, который победить не получилось. Суть в том, что на абсолютно чистой винде (только что установленной внутри виртуальной машины) 3D-эффекты описанные на CSS3 не работают, а именно вот эта демка: www.xiper.net/examples/html-and-css-tricks/effects/flip-click.html Хотя все dll ложил рядом с nw.exe
                0
                Все-все? (И DLL от DirectX тоже?)
                  0
                  Помойму да, пробовал устанавливать специально последний пакет directx redistributable и вытаскивать из него эти два файла. Но на выходных всё-таки снова попробую всё повторить.
                    0
                    В случае неудачи рекомендую сообщить разработчикам node-webkit о проблеме, сообщив все данные («чистая винда», «клал DLL от DirectX», URL сайта, модель видюхи) и надеясь на воспроизводимость, а значит, и на лёгкую отлавливаемость этой проблемы разработчиками.

                    Только сперва попробовать на невиртуализованной винде.
                      +1
                      Хорошо. Если воспроизведу, то выложу даже образ виртуальной машины. Спасибо.
                        0
                        Ещё полезно попробовать, идёт ли эта демка в Chromium (или в Google Chrome) на той же машине. А не то может и не в node-webkit быть дело, а в одной из составных частей его. Тогда и о баге надобно будет сообщать сразу в Google.
                          0
                          Да, данная демка работала в Google Chrome на этой же машине.
                            0
                            Сейчас занялся этим багом. Воспроизвести его получилось. Последовательность была такой:
                            1) Установил Windows XP
                            2) Установил Google Chrome
                            3) Установил directx_Jun2010_redist.exe
                            4) Перезапустил систему
                            5) Собрал app.exe согласно документации, используя html код от сюда: www.xiper.net/examples/html-and-css-tricks/effects/flip-click.html
                            6) Дополнительно положил файлы D3DCompiler_43.dll и d3dx9_43.dll рядом с app.exe

                            Итог: не работает. Интересен тот факт, что также и в Google Chrome не работает этот пример.

                            Может быть причиной то, что используется виртуальная машина VirtualBox или всё-таки стоит оформить этот как баг?
                              0
                              Если и в Google Chrome не работает, тогда попробуйте сообщить его как проблему на сайте Chromium.

                              (Понятно, что после исправления этой проблемы в Chromium она будет автоматически исправлена и в последующей крупной версии движка node-webkit, код которого основан на Chromium.)

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