node-webkit制作桌面应用
心血来潮突然想用js尝试写桌面应用,突然发现我大js真的无所不能。在网上搜到了这么一个东东:node-webkit。用Node.js来进行系统资源的访问,用HTML+CSS完成页面的搭建。哇,一切突然就好像变得特别简单。大学上c#课时也用c#制作过一些很入门的桌面应用,严格来说那个叫桌面窗体程序。比起来,node-webkit创建桌面应用的方式就像是我平时用来搭积木的东西突然可以盖楼了~厉害了,我的js。
废话少说,我把我的helloworld过程详细搞出来,过程中还有一些小坑,小思考。如下:
1.环境
首先,肯定要把node-webkit这个好帮手下载下来。
gihub地址:https://github.com/nwjs/nw.js/nw官网:https://nwjs.io/
根据系统不同选择不同的版本,我这里下的是win64的版本,其他系统也基本大同小异。
v0.20.1: (Feb 2, 2017, based off of Node.js v7.5.0, Chromium 56.0.2924.87): release notes
NOTE You might want the SDK build. Please read the release notes.
☀Linux: 32bit / 64bit
☀Windows: 32bit / 64bit
☀Mac 10.9+: 64bit
☀Use LTS build for Win XP and early OSX.
latest live build: git tip version; build triggered from every git commit: https://dl.nwjs.io/live-build/
Previous versions
下载以后找到nw.exe。如果可以打开,那么就是环境搭好啦~接下来,就是开发软件啦~\(≧▽≦)/~
2.Hello World
我们为了方便就在刚刚下载下来的nw文件夹里创建一个文件夹,例如名字叫做product1。然后创建一个package.json。格式如下:
{
"name": "app1",//程序名字
"version": "0.1.0",//版本号
"main": "index.html",//程序入口
"window": {
"toolbar": false, // 工具栏
"frame": false, // 框架
"width": 1000,
"height": 650,
"resizable": false//是否可调整大小
}
}
这里我只是用了一部分参数,更多的可以去官网查询文档,这里就不提了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="index.css">
<script src="jquery-3.1.1.min.js"></script>
</head>
<body>
<div id="top">
<span id="logo">CosName</span>
<div id="drag"></div>
<ul id="nav">
<li id="close"><a href="#" id="close_btn"></a></li>
<li id="large"><a href="#" id="a" class="large_btn"></a></li>
<li id="mini"><a href="#" id="mini_btn"></a></li>
</ul>
</ul>
</div> <div id="play_area">
<video src="" width="400" height="400" controls="controls "></video>
</div>
<div id="movie_list">
<ul>
<li><a href=""></a></li>
</ul>
</div>
<div id="footer">
</div>
</body>
</html>
<script src="index.js" type="text/javascript"></script>
Html
*{
margin:;
padding:;
background-color: #3C3C3C;
color: lightgray;
outline: none;
user-select: none;
}
ul{
list-style: none;
}
a{
text-decoration: none;
}
#top{
width: 100%;
height: 30px;
border-bottom: 1px solid #272727;
}
#logo{
position: absolute;
left: 10px;
right:;
width: 80px;
height: 30px;
line-height: 30px;
font-weight: bold;
}
#drag{
width: 91%;
height: 30px;
-webkit-app-region: drag;
display: inline-block;
}
#nav{
position: absolute;
display: inline-block;
right:;
width: 90px;
height: 30px;
background-color: rebeccapurple;
}
#nav li{
width: 30px;
height: 30px;
float: right;
}
#nav li a{
display: inline-block;
width: 30px;
height: 30px;
z-index:;
}
#close a{
background: url("close.png") 0 no-repeat;
background-size: 20px;
background-position: center;
}
#large a{
background: url("large.png") 0 no-repeat;
background-size: 20px;
background-position: center;
}
#mini a{
background: url("mini.png") 0 no-repeat;
background-size: 20px;
background-position: center;
}
#close a:hover,#a:hover,#mini a:hover{
opacity: 0.7;
}
#play_area{
margin: 30px 0 0 20px;
width: 400px;
height: 400px;
border: 1px solid #272727;
box-shadow: 0 1px 2px #8E8E8E;
}
#footer{
position: fixed;
bottom:;
width: 100%;
height: 32px;
border-top: 1px solid #272727;
box-shadow: 0 1px 2px #8E8E8E;
}
css
var gui = require('nw.gui');
var win = gui.Window.get();
$('#close_btn').click(function () {
win.close();
})
$("#mini_btn").click(function () {
win.minimize();
})
$("#a").click(function () {
if($(this).attr("id")=="a"){
win.maximize();
$(this).css("backgroundImage","url('restore.png')")
$(this).attr({id:"b"});
}else{
win.restore();
$(this).css("backgroundImage","url('large.png')")
$(this).attr({id:"a"});
}
})
Javascript
当然这一步自由发挥,程序最终呈现的效果就是你的页面在浏览器上的效果。
3.打包
nw应用的打包灰常简单,只需要把上边我们创建的所有和页面有关的文件包括那个json,统统压缩成zip格式的文件,然后更改后缀名为.nw,把这个文件直接拖到nw.exe上运行,出来的就是你的程序了。
这一步里我要说的是,如果在测试程序阶段,可以直接把没有压缩的文件夹拖到nw.exe上运行,不需要压缩也不要改后缀名,效果是一样一样的~
到了这里虽然我们程序效果有了,但是有一个很重要的问题,假如我做好了一个桌面程序,我想要给小伙伴发过去让他感受一下我的技艺精湛:)我总不能把他拖到我电脑前给他演示呀。这里有两步,首先把我们之前产出的这些文件和nw.exe进行一个合并,可以在nw根目录shift加右键快速打开命令窗口,然后键入以下代码:
copy /b nw.exe+myapp.nw myapp.exe(这里的myapp就是你压缩文件的名字,myapp.exe是你打包后产出exe程序的名字)
4.总结
Javascript搭建桌面应用的过程可谓简单轻松,但是这种方式也有一个显著的弊端。就是文件体积庞大。像我上述的那个程序全部打包好后有80多mb,可分明我都没写什么啊╮(╯_╰)╭。所以目前看来娱乐娱乐差不多,要做商业产品的话,估计还得优化。
node-webkit制作桌面应用的更多相关文章
- heX——基于 HTML5 和 Node.JS 开发桌面应用
heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...
- Fenix – 基于 Node.js 的桌面静态 Web 服务器
Fenix 是一个提供给开发人员使用的简单的桌面静态 Web 服务器,基于 Node.js 开发.您可以同时在上面运行任意数量的项目,特别适合前端开发人员使用. 您可以通过免费的 Node.js 控制 ...
- 基于node.js制作爬虫教程
前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...
- 在deepin系统中制作桌面快捷方式
在使用deepin-wine 安装一些软件的时候,每次启动都需要到.deepinwine目录下运行deepin-wine xx.exe.笔者在安装过HeidiSql之后,一直苦于这种情况.比较好的解决 ...
- electron+vue制作桌面应用--自定义标题栏
electron会默认显示边框和标题栏,如下图 我们来看一下如何自定义一个更加有(gao)意(da)思(shang)的标题栏,例如网易云音乐这种 首先我们要把默认的标题栏删掉,找到主进程中创建窗体部分 ...
- electron利用nodejs+移动端技术跨平台桌面应用开发框架——记录下,类似node webkit!
Build cross platform desktop appswith JavaScript, HTML, and CSS Electron: 1.6.8Node: 7.4.0Chromium: ...
- heX:用HTML5和Node.JS开发桌面应用
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- (转)heX——基于 HTML5 和 Node.JS 开发桌面应用
本文转载自:http://techblog.youdao.com/?p=685 简介:heX,一个允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.是你开发 ...
- node.js 开发桌面程序, 10个令人惊讶的NodeJS开源项目
用 node-webkit 开源框架. 做企业站,杠杠地 包括电子书和支付宝系统都是node开发的,. 接收传感器发送的数据再运算...对水泵.风机.空调这些硬件进行远程控制. 细数10个令人惊讶的N ...
随机推荐
- bzoj-1834 network 网络扩容 【网络流】
这题就是复习下网络流. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #def ...
- IOS开发中深拷贝与浅拷贝
简而言之: 1.对不可变的非集合对象,copy是指针拷贝,mutablecopy是内容拷贝 2.对于可变的非集合对象,copy,mutablecopy都是内容拷贝 3.对不可变的数组.字典.集合等集合 ...
- UVa 10041 - Vito's Family
题目大意:给出一些点,找到一个位置使这个位置到所有的点的距离的和最短. 很明显,排序,找中位数.关于中位数:有n个从小到大的数,k=(n+1)/2,若n为奇数,k为中位数,若n为偶数,k为中间那两个数 ...
- Redis client Python usage
http://www.yiibai.com/redis/redis_sorted_sets.html mport redis r_server = redis.Redis('localhost') # ...
- volatile的理解和使用
package thread; /** * Created by Administrator on 2017/1/15. */ public class Counter { public volati ...
- 如何编写高质量CSS
虽然写过很多css代码,但每次动手写都让我痛苦不堪,如何组织好那一堆堆的代码,如何提高代码复用率,甚至如何命名类,这些都让我纠结.下面的浅显的谈一谈在看了<编写高质量代码>中的html和c ...
- 避免Node.js中回调地狱
为了解决这个阻塞问题,JavaScript严重依赖于回调,这是在长时间运行的进程(IO,定时器等)完成后运行的函数,因此允许代码执行经过长时间运行的任务. downloadFile('example. ...
- PHP之Mysql常用SQL语句示例的深入分析
1.插入数据insert into表名(列名1,列名2,列名..) values(值1,值2,值...); insert into product(name, price, pic_path) val ...
- centos 单独安装nginx
安装包下载网址: http://nginx.org/en/download.html 进入Linux文件夹执行 wget http://nginx.org/download/nginx-1.8.0.t ...
- 一点养老APP模式定制系统平台源码
一点养老APP模式定制系统开发:136.1013.1824电/微:搭建一点养老APP模式定制系统平台.专注于为企业和商家客户提供基于腾讯微信公众平台系统程序和APP等开发服务,中国养老金融50人论坛2 ...