Три дня назад (1 февраля) Roger Wang объявил о выходе новой версии движка node-webkit — созданного в недрах Intel Open Source Technology Center мощного сочетания WebKit и Node.js, позволяющего создавать кросс-платформенные графические приложения методом веборазработки на языках HTML, CSS и JavaScript.
Новая версия имеет номер 0.4.1; на её основе нетрудно составить и запустить, например, вот такое окно:
Почти семь недель прошло с того дня (18 декабря), когда я обозревал одну из предыдущих версий (0.3.6) этого движка. Вам нетрудно заметить, что за это время успела перемениться не только последняя, но и предпоследняя цифра версии. Сейчас я расскажу, какие изменения, в node-webkit произошедшие, отражает эта перемена.
Прежде всего необходимо упомянуть опубликованный 18 января план выпусков node-webkit на 2013 год. В нём запланировано, что новая крупная версия node-webkit (с изменением предпоследней цифры версии) будет появляться каждые два месяца (например, 0.5.0 выйдет через два месяца после 0.4.0), и с каждым таким выпуском будут появляться новые крупные усовершенствования (например, в 0.5.0 ожидается поддержка распечатывания страниц); кроме того, каждая такая версия будет основываться на свежих (ко времени её выхода) версиях Node.js и Chromium. Более мелкие версии (такие, как 0.4.1) станут появляться несколько чаще, но содержать только более мелкие усовершенствования и исправления багов.
Сразу скажу, что переход от 0.4.0 к 0.4.1 сопровождался исправлением более полудесятка достаточно неприятных багов, из которых один серьёзный (падение программы при попытке подключить и использовать плагин). Я даже поневоле призадумался, не следует ли в дальнейшем опасливо воздерживаться (как от нестабильных) от употребления тех версий, номера которых оканчиваются на «.0».
Вот список остальных новшеств версии 0.4.1 (по сравнению с 0.3.6):
- Приложение, работающее на движке node-webkit, теперь может задать какое угодно значение заголовка «User-Agent» в HTTP-запросе к отдалённым сайтам. Для этой цели достаточно изменить значение поля "user-agent" в манифесте приложения. Внутри этого значения можно употреблять некоторые ключевые слова, которые окажутся автоматически заменены на версию или имя приложения, на версию node-webkit или WebKit, на сведения об операционной системе и о разрядности процессора (подобные имеющимся в популярных браузерах). Если же значение заголовка «User-Agent» не изменено, то в нём указывается та версия Chromium, на которой node-webkit построен.
- Серьёзно расширены средства дистанционного управления компьютером: доверенным отдалённым страницам, открытым в node-webkit, предоставляется доступ к движку Node в соответствии с некоторым «белым списком». Этот список доверенных сайтов указывается в манифесте приложения как значение поля с именем "node-remote", мною придуманным. Список составляется совершенно по тем же самым правилам, что и список локальных сайтов (к которым браузеру можно обращаться напрямую без прокси) — иными словами, он содержит через запятую (или через точку с запятою) ряд шаблонов, которыми могут быть имена сайтов (например, «example.com», «*example.com», «*.example.com», «*example.com:99», «https://x.*.example.com:99»), или суффиксы доменов («.example.com», «.com», «http://.example.com»), или IP-адреса («127.0.1», «[0:0::1]», «[::1]», «http://[::1]:99»), или IP-диапазоны («192.168.1.1/16», «fefe:13::abc/33»), или просто ключевое слово «<local>» (соответствующее списку «127.0.0.1,::1,localhost»). Теперь можно держать некоторую часть исходного кода приложения у себя на сайте (как скрипты, так и интерфейсы), а работать оно станет у пользователя на компьютере через API Node. Одно из возможных решений проблемы обновления программного обеспечения.
- Появился диалог HTTP-аутентификации на тот случай, когда отдалённый сайт спрашивает имя и пароль.
- Поддерживается API document.cookie для локальных страниц.
- В манифесте приложения появилось поле "chromium-args" (для имитации аргументов командной строки Chromium: например, "--enable-webaudio-input" для экспериментов с API getUserMedia) и поле "js-flags" (для задания параметров V8: например, "--harmony_proxies --harmony_collections" для доступа к части возможностей JavaScript Harmony).
- API «require("nw.gui").Window.open()» пополнился новым полем "new-instance", посредством которого можно запустить в новом окне новый экземпляр процесса Node и WebKit.
- У того же объекта Window появилось свойство zoom (и одноимённое ему событие), отражающие внутрибраузерное увеличение сайта. В некоторых случаях это проще, чем менять font-size для body.
- Можно переходить по гиперссылкам с небраузерными именами протокола (допустим, «mailto:» или «area://»), и они будут скармливаться обработчикам, прописанным в операционной системе.
- Свойство process.mainModule станет указывать на основной скрипт, прописанный в поле "node-main" в манифесте приложения.
Как видите, полезных новшеств понабралось почти с десяток — и каждое из них кого-нибудь да порадует, потому что упрощает жизнь разработчикам.
Автор: Mithgol