node-webkit学习笔记

node-webkit学习笔记

基础

  • 概念定义

        基于node.js和chromium的应用程序实时运行环境,可运行通过HTML(5)、CSS(3)、
    Javascript来编写的本地应用程序。node.js和webkit的结合体,webkit提供DOM操作,
    node.js提供本地化操作;且将二者的context完全整合,可在HTML代码中直接使用
    node.js的API。
    
  • 项目地址: https://github.com/nwjs/nw.js

  • 项目官网: http://nwjs.io/

  • 学习资料:

安装

  • Windows

    下载后解压, 双击目录下nw.exe文件, 如弹出提示窗口, 则表示安装成功.

应用开发

  • HelloWorld

    • 在nw安装目录下创建应用的工作目录, 如: prjHelloWorld

    • 进入工作目录, 创建文件index.htmlpackage.json

    • 编写package.json文件, 输入:

      {"name": "nw-helloWorld", "main": "index.html"}
      
    • 将工作目录拖动到nw.exe, 就能将应用运行起来.

      或是将工作目录下的文件打包为zip文件,如prjHelloWorld.zip, 通过命令行启动应用D:\>nw.exe prjHelloWorld.zip.

  • 应用的目录结构(推荐)

    APP
    |-- package.json    // 应用的配置文件
    |-- index.html      // 应用的启动页面
    |-- js/             // 应用的脚步文件
    |   |-- ...
    |-- css/            // 应用的样式文件
    |   |-- ...
    |-- resources/      // 应用的资源文件
    |   |-- ...
    |-- node_modules/   // 应用使用的nodejs的扩展组件
    |   |-- ...
    

应用打包

  • 打包为exe文件

    • 将应用的工作目录先打包为zip文件,并修改后缀为.nw, 如prjHelloWorld.nw

    • 执行命令 copy \b nw.exe+prjHelloWorld.nw AppHelloWorld.exe

    • 生成的AppHelloWorld.exe即为已打包好的应用文件.

      备注: 生成的应用文件现在还无法独立运行, 它必须依赖于nw安装目录下*.dll等文件.

    • 使用第三方工具进行再次封装.如官方推荐的Enigma Virtual Box.详细使用说明见wiki.

API

配置文件package.json

一个package.json文件的示例

{
  "main": "index.html", 
  "name": "nw-demo",
  "description": "demo app of node-webkit",
  "version": "0.1.0",
  "keywords": [ "demo", "node-webkit" ],
  "window": {
    "title": "node-webkit demo",
    "icon": "link.png",
    "toolbar": true,
    "frame": false,
    "width": 800,
    "height": 500,
    "position": "mouse",
    "min_width": 400,
    "min_height": 200,
    "max_width": 800,
    "max_height": 600
  },
  "webkit": {
    "plugin": true
  }
}
  • main

    (string) 必要参数. 用于设置应用的启动页面. 可以使用文件名或是一个基于package.json的相对路径.

    ps: 不要使用诸如index.html?foo=bar这样的带参数的路径.nwjs会将连同参数在内的全部的字符识别为一个文件.

    pps: 当你需要在应用中进行传参时, 可以使用App protocol.

  • name

    (string) 必要参数. 设置应用的包名(package name).名字必须是全局唯一的.nwjs会对name进行统一的存储管理.

    名称必须是小写的,由字母和数字组成,可包含字符".", "_", "-".

  • nodejs

    (boolean) 设置开关nodejs支持.

  • node-main

    (string) 指定一个node.js文件在程序启动时执行. 其运行于node上下文中, 可以用来实现类似后台线程的功能.
    示例:

    设以下为node-main指定的脚本文件main.js的内容.

    var i  = 0;
    exports.callbackIndex = function() {
        window.alert("i = " + i);
        i += 1;
    }
    

    我们在页面index.html的onload中执行脚本

    ...
    <body onload="process.mainModule.exports.callbackIndex()">
    ...
    

    刷新页面index.html, 可以发现i的值再不断增长,而不会被重置.

  • single-instance

    (boolean) 设置是否支持开启多个运行实例. 默认为false,即默认情况下只能启动一个应用的实例.

  • window

    (object) 设置应用的窗口.

    • title

      (string) 设置窗口的标题.

    • width/height

      (int) 设置窗口的宽高.

    • min_width/min_heigth

      (int) 设置窗口的最小宽高

    • max_width/max_height

      (int) 设置窗口的最大宽高

    • toolbar

      (boolean) 设置窗口的导航工具栏

    • icon

      (String) 窗口的icon

    • position

      (String) 窗口的打开位置. 可设置为: null, center, mouse

    • as_desktop

      (boolean) X11运行环境下的设置

    • resizable

      (boolean) 设置窗口大小是否可变

    • always-on-top

      (boolean) 设置是否永远居于其他窗口的上层

    • visible-on-all-workspaces

      (boolean) 是否在多个工作空间可见.目前仅支持Mac OS X和Linux

    • fullscreen

      (boolean) 设置窗口是否全屏化.

    • show_in_taskbar

      (boolean) 设置窗口是否在任务栏显示. 默认为true

    • frame

      (boolean) 设置窗口是否无边框

      当设置为无边框模式后, 默认情况下, 无法执行拖动的操作.可以添加样式{-webkit-app-region: drag}body或是任意页面元素,是窗口变为可拖动. (?似乎会引起右键菜单的问题?)

    • show

      (boolean) 如果设置为false, 则应用在启动后隐藏

    • kiosk

      (boolean) 设置kiosk模式. 在此模式下, 应用默认全屏,并阻止用户从应用中离开.

    • transparent

      (boolean) 开启透明窗口模式. 默认为false

      用于控制css中的透明度设置.

  • webkit

    (object) 设置应用的webkit.

    • plugin

      (boolean) 是否加载浏览器插件,如flash等. 默认为fasle

    • java

      (boolean) 是否加载Java applets. 默认为false

    • page-cache

      (boolean) 是否允许页面缓存. 默认为false

  • user-agent
    (String) 设置应用发起的http请求中的User-Agent信息

  • node-remote

  • chromium-args

  • js-flags

  • inject-js-start/inject-js-end

  • additional_trust_anchors

  • snapshot

  • dom_storage_quota

  • no-edit-menu

  • description

  • version

  • keywords

  • maintainers

  • contributors

  • bugs

  • licenses

窗口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 原文地址:Beyond The Browser: From Web Apps To Desktop Apps原文作...
    墨同学_imink阅读 4,816评论 1 20
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • [转载自http://get.ftqq.com/7870.get] <link rel="icon" type="...
    起航者de风景阅读 4,203评论 0 2
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    w_zhuan阅读 3,607评论 2 41
  • Node.js是目前非常火热的技术,但是它的诞生经历却很奇特。 众所周知,在Netscape设计出JavaScri...
    Myselfyan阅读 4,061评论 2 58