Новшества node-webkit 0.7.1

    Прямо сегодня (19 августа) интеловский Центр технологий с открытым исходным кодом выдал на-горá очередную версию движка node-webkit. Движок этот, как и прежде, интересен тем, что умеет открывать браузероподобные окна (на основе кода Chromium) и употреблять в них API Node.js так что он обеспечивает нетрудное создание GUI-приложений методами веборазработки (на языках JavaScript, HTML, CSS, WebGL и т. д.) под операционные системы Windows, Mac OS X и Linux.

    Новая версия получила номер 0.7.1 и содержит движок Node версии 0.10.12, как нетрудно видеть в тестовом окне:

    [скриншот окна]

    Код тестового окна я сегодня открыл на Гитхабе, так что желающие могут с ним ознакомиться и убедиться воочию, что начальные (helloworldные) шаги программирования для node-webkit ничуть не сложнее обычной веборазработки, усиленной возможностями API Node.

    Менее месяца тому назад (24 июля) я обозрел одну из предыдущих версий node-webkit (версию 0.6.3). С тех пор прошло не много времени, однако в node-webkit появился ряд небезынтересных новшеств:

    • Появилась поддержка протокола app. Теперь в манифесте приложения можно записать параметр main в виде «"main": "app://hostname/path"», причём в роли имени хоста (hostname) может выступать любой идентификатор, а путь (path) отсчитывается от того каталога-корня, в котором лежит сам манифест (файл package.json). После этого во браузерной части приложения (в HTML, в CSS и т. п.) все «абсолютные адреса от корня» (начинающиеся косою чертою) станут отсчитываться от того же каталога — этот эффект будет необыкновенно полезен для тех, кто переупаковывает под node-webkit какое-нибудь такое приложение, которое ранее крутилось в Паутине и содержало массу путей «от корня». Понятно, что это частный случай. Если же случай противоположный (все пути были относительными), то можно не возёхаться с новым протоколом, а в значении у "main" записывать, как и раньше, относительный путь от манифеста. (В простейшем случае — "index.html".)
       
    • Появилась возможность джаваскриптом менять значение элемента input, имеющего атрибут type="file"; таким образом, обеспечивается полная автоматизация отгрузки файлов в Сеть внутрибраузерным способом (что удобнее, чем в API Node).
       
    • В новом поле App.manifest можно считывать значения манифеста приложения. Не нужно лишний раз делать require('package.json'), ведь все эти сведения и без того считываются node-webkit при запуске приложения.
       
    • К обработчику события App.open теперь поступает командная строка целиком. Раньше каждый параметр командной строки вызывал отдельное такое событие, а теперь можно обрабатывать и те случаи, когда в командной строке не только перечисляются файлы, которые необходимо открыть, но и указаны параметры, имеющие какое-нибудь другое значение (например, флаги настроек).
       
    • API getUserMedia стало можно использовать для захвата копии всего экрана (как вон в том примере, для Chrome предназначенном).

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

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

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

      +1
      Очень интересно! А при распространении приложений, что необходимо ставить «в довесок»?
        +2
        минимально необходимый набор — только сам node-webkit.
          +1
          Как верно выше заметил djakomo, большинству приложений хватает самогó движка node-webkit.

          Если используется какой-нибудь плагин NPAPI, то можно и плагин распространять вместе с приложением. (Но вообще-то node-webkit умеет подхватывать плагин из системы, если он установлен в системе, так что для наиболее распространённых плагинов — например, для Flash — можно на это одно и положиться.) В таких случаях надобно в манифесте включить употребление плагинов.

          Если в приложении используется WebGL и есть желание, чтобы WebGL работал поверх DirectX в Windows, то придётся файлы D3DCompiler_43.dll и d3dx9_43.dll (из дистрибутива DirectX) приложить.

          Если нужна поддержка MP3 и H.264 в <audio> и <video>, то понадобится библиотеку пересобрать и приложить, тем самым «инфицируя» свой проект GPL-кодом.
            0
            Меня больше интересует поддержка криптографии через API. Например, openssl.
              0
              Есть в API у Node модуль crypto, который, насколько я его понимаю, примерно на openssl и основывается.

              При употреблении в node-webkit результат обращения к этому модулю нельзя присваивать одноимённой переменной (имя «crypto» занято в DOM у WebKit), но в остальном никаких трудностей.
                +1
                Спасибо! Надо будет изучить его для использования в своих проектах.
          +2
          В нем есть borderless режим? В appjs есть но он какой-то кривой.
          image
            0
            Есть; достаточно для frame установить значение false.
              +1
              Прозрачность, например через альфа-канал поддерживается? Как организовать перетаскивание окна?
              Есть в доке где-нибудь про это?
                0
                Прозрачность окна, к сожалению, не поддерживается.

                О перетаскивании окна см. ниже.
                  0
                  Жаль. Полноценной замены какой-нибудь джавы не получается пока :(
                0
                Но затем всё же придётся поиграть со свойствами «-webkit-app-region» и «-webkit-user-select» у той области, за которую предполагается таскать окно это.

                Примеры кода есть в вики.
                +2
                Есть. Например, вот так:

                Режим с тулбаром не позволяет перемещать окно (без дополнительных настроек), но позволяет его масштабировать, потянув за границу.
                Режим без тулбара:

                такое окно не маштабируется и не перемещается пользователем (без дополнительного кодирования).
                Ещё есть kiosk mode, предназначенный для программ, устанавливаемых в терминалы и подобные устройства (теоретически даёт fullscreen mode и невозможность переключиться на другие программы).
                Кроме того, в случае Windows возможно завернуть само приложение и движок Node-Webkit в единый exe-файл, причём этому файлу есть возможность не только назначить иконку, но и связать потом с определённым типом документов (т.е. создание к примеру редакторов или просмотрщиков вполне реально).
                А вот чего действительно не хватает, так это возможности вызывать внешние API (например, расположенные в DLL). Теоретически существует node-ffi, специально предназначенный для этих целей, на практике же для NWK этот модуль надо пересобирать. А тут, сами понимаете, всё в старых добрых традициях OpenSource: проще и быстрее написать собственный модуль, чем шаманить над сборкой уже написанного кем-то…
                  +1
                  Можно собрать по инструкции за четыре шага.

                  Шаг 1: npm install nw-gyp -g

                  Шаг 2: npm install ffi

                  Шаг 3: cd node_modules\ffi

                  Шаг 4: nw-gyp rebuild --target=0.7.1

                  Перед выполнением всех этих шагов в системе должен стоять Python 2.7 (причём прописанный в PATH) и Microsoft Visual Studio C++ 2010 (сгодится и Express).
                0
                Очень не хватает возможности сборки программы в один бинарник :(
                0
                Извините, а может кто-нибудь описать реальный кейс в каких случаях это можно было бы использовать и в чем цимус?
                  +1
                  Во-первых, полезно веб-программистам, не знакомым с разработкой под десктоп.
                  Да и получить на выходе полностью кроссплатформенную програму — тоже большой плюс.
                    +1
                    … или использование одинакового набора инструментов для построения десктопного и клиент-серверного ПО.
                    0
                    А возможно ли повернуть окно nw? Например, как фото поворачивается мультитач жестами в Mac Os или iOS. Как поворачивать элементы страницы, безусловно, понятно, а вот само окно — нет, но очень хотелось бы.
                      0
                      Не совсем понятен ваш вопрос, в чем должен заключаться поворот окна на десктопной ОС. Изменение размера окна ( с 500х200 на 200х500, к примеру)? Да, это можно сделать программно.
                        0
                        Имеется ввиду, что в ответ на мультитач жест rotate (обзовем его так) поворачивается именно окно nw, а не просто элементы на страничке.
                        Как на фото, только представьте себе, что вместо фото у нас окно браузера.
                        Я понимаю, что глупый вопрос задаю, но все же интерес не позволяет обойти его стороной.
                      0
                      Спасибо за новость. А нет ли в планах решить проблему с libudev? Симлинки это хорошо, но не кошерно.
                        0
                        кто нибудь пробовал заюзать webrtc под node-webkit? нужны ли какие либо дополнительные костыли, или все будет работать «из коробки»?

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

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