NW.js (formerly known as node-webkit) is an application runtime based on Chromium and node.js, through which native applications can be written with HTML and JavaScript. This article mainly introduces the introduction and use of NW.js, Friends in need can refer to
Introduction
NW.js (formerly known as node-webkit) is an application based on Chromium and node.js At runtime, it lets you write native applications in HTML and JavaScript. It also allows you to call Node.js modules from the DOM, enabling a new development model for writing native applications using all web technologies.
(1) A new way to write native applications using the most popular technologies on the Internet
(2) Based on HTML5, CSS3, JS and WebGL
(3) Fully supports all nodejs APIs and third-party modules
(4) You can use DOM to directly call nodejs modules
(5) Easy to package and distribute
(6) Support running environment Including 32-bit and 64-bit Window, Linux and Mac OS
The usage is as follows:
1. Download nw
1. Download NW.js (official website: http://nwjs.io/)
Normal here is the runtime Well, the sdk is some toolbox, please download it~
https://nwjs.io/downloads/
2. Download Enigma Virtual Box (official website: http://enigmaprotector.com/)
##2. Configure the package.json file
1 2 3 4 5 | {
"name" : "nw-demo" ,
"version" : "0.0.1" ,
"main" : "index.html"
}
|
Copy after login
More available are as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | {
"main" : "app/index.html" ,
"name" : "WeixinMenuEditor" ,
"description" : "使用nw.js封装的一个微信公众号菜单编辑器App" ,
"version" : "0.0.1" ,
"keywords" : [ "微信" , "菜单编辑器" ],
"window" : {
"title" : "微信菜单编辑器" ,
"icon" : "app/static/img/weixin_logo.jpg" ,
"toolbar" : true,
"frame" : true,
"width" : 1008,
"height" : 750,
"position" : "center" ,
"min_width" : 400,
"min_height" : 200
},
"webkit" : {
"plugin" : true,
"java" : false,
"page-cache" : false
},
"chromium-args" : "-allow-file-access-from-files"
}
|
Copy after login
- title: string, set the default title.
- width/height: The size of the main window.
- toolbar : bool value. Whether to display the navigation bar.
- icon: The icon of the window.
- position : string. The position when the window is opened can be set to "null", "center" or "mouse".
- min_width/min_height: The minimum value of the window.
- max_width/max_height: The maximum value displayed by the window.
- resizable : bool value. Whether to allow window resizing.
- always-on-top : bool value. Window on top.
- fullscreen : bool value. Whether to display in full screen.
- show_in_taskbar : Whether to display the icon in the taskbar.
- frame : bool value. If set to false, the program will display without borders.
- "chromium-args" :"-allow-file-access-from-files" is equivalent to adding startup parameters to Google Chrome. This line of code allows angularjs to directly access local json document.
3. Generate exe
The project directory is as follows:
Compress the html project into zip, and rename it to nw. Enter the following command
1 | copy /b nw.exe+app.nw firstApp.exe
|
Copy after login
4. Release the package
Open Enigma Virtual Box program (enigmavb.exe), the interface should be like this:

Then select the test.exe file generated in the previous step at Enter Input File Name, Enter Output Name You can default;
Then click the Add button below and delete nw.exe and test from the nwjs folder (the name does not have to be nwjs, it is the folder of the NW.js environment in the first step) Load all files except .nw and test.exe, then click Process and wait for the execution to be successful. At this time, a new .exe file will be generated in the corresponding path (we will call it newtest.exe for now). The newtest.exe file can be run in any Windows environment. You can copy it to your friends to show it.
The following are some pitfalls in using nw
1. If you only want the current application to gain focus before executing the shortcut key, take a look at this The library uses js to set shortcut keys
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var gui = require ('nw.gui');
var option = {
key: "Ctrl+R" ,
active: function () {
alert( "全局快捷键" + this.key + "按下" );
},
failed: function (msg) {
alert(msg);
}
};
var shortcut = new gui.Shortcut(option);
gui.App.registerGlobalHotKey(shortcut);
gui.App.unregisterGlobalHotKey(shortcut);
|
Copy after login
2.nw.js cannot refresh the page multiple times, causing various abnormalities. This is a bug caused by reloading the js file and reassigning variables after refreshing the page. Solution
nw.js Read and save files
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <html>
<head>
<meta charset= "utf-8" />
<title>nw.js实现文件读写</title>
</head>
<body>
<input id= "readFile" type= "file" >读取文件</input>
<!-- 默认文件名为filename.html -->
<input id= "writeFile" nwsaveas= "filename.html" type= "file" >保存文件</input>
<p></p>
<script>
var fs = require ( "fs" );
var chooser = document.querySelector('#readFile');
chooser.addEventListener( "change" , function (evt) {
var filePath = this.value.toString();
document.querySelector( "p" ).innerHTML = "读取文件从" + filePath;
fs.readFile(filePath, function (err, data) {
if (err) {
layer.msg( "读取文件失败! :" + err.message);
return ;
} else {
console.log(data);
alert(data);
}
})
});
chooser = document.querySelector('#writeFile');
chooser.addEventListener( "change" , function (evt) {
var filePath = this.value.toString();
document.querySelector( "p" ).innerHTML = "写入文件到:" + filePath;
fs.writeFile(filePath, "Hello!\n" , function (err) {
if (err) {
alert( "保存失败!" );
}
});
});
</script>
</body>
</html>
|
Copy after login
3. Use nwjs'fs' to directly save cancas as a local image. The method found on the Internet is to pop up the selection box to save. But I need to save the image directly to the specified path, and a dialog box cannot pop up for the user to choose. kailniris gave a solution, which is feasible. The code is as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var fs = require ('fs');
var c = document.getElementById( "myCanvas" );
var ctx = c.getContext( "2d" );
ctx.moveTo(0, 0);
ctx.lineTo(200, 100);
ctx.stroke();
<canvas id= "myCanvas" width= "200" height= "100" style= "border:1px solid #000000;" >
</canvas>
base64Data = c.toDataURL( "image/png" ).replace(/^data:image\/png;base64,/, "" )
fs.writeFile( "c:/Dev/test.png" , base64Data, 'base64', function (err) {
if (err) {
console.log( "err" , err);
} else {
return res.json({ 'status': 'success' });
}
});
|
Copy after login
Use html2canvas to convert the html page into an image, and then save the image locally. Paste the code (you need to import html2canvas.js and jquery):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var filePath = templateDir + filename + '.html';
var editerDocument = window.editor.edit.iframe.get().contentWindow.document;
html2canvas(editerDocument.body, {
onrendered: function (canvas) {
var base64Data = canvas.toDataURL( "image/png" ).replace(/^data:image\/png;base64,/, "" )
var fs = require ( "fs" );
fs.writeFile(templateDir + filename + '.png', base64Data, 'base64', function (err) {
if (err) {
alert( "保存模板失败!" );
}
$('#model_template_name').modal( "hide" );
layer.msg( "模板已保存为" + filename);
});
}
});
|
Copy after login
4. Reference the Node built-in module in app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | $scope .fs = require ('fs');
$scope .readConfig = function () {
try {
var configStr = $scope .fs.readFileSync(config.weixin.path, 'utf8');
console.log(configStr);
var obj = eval ('(' + configStr + ')');
$scope .weixin.appid = obj.appid;
$scope .weixin.appsecret = obj.appsecret;
$scope .weixin.qrcodeurl = obj.qrcodeurl;
}
catch (e) {
console.log(e);
alert( "读取微信配置文件失败" );
}
}
$scope .writeConfig = function () {
try {
var configStr = JSON.stringify( $scope .weixin);
$scope .fs.writeFileSync(config.weixin.path, configStr, {encoding: 'utf8'});
return true;
}
catch (e) {
console.log(e);
alert( "写入微信配置文件失败" );
return false;
}
}
|
Copy after login
5. Reference the third-party module wechat-api
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $scope .wechatApi = require ('wechat-api');
$scope .query = function () {
var api = new $scope .wechatApi( $scope .weixin.appid, $scope .weixin.appsecret);
api.getMenu( function (err, result) {
if (err) {
console.log(err);
alert( "查询菜单异常" );
} else {
load(result);
$scope . $apply ();
}
});
};
|
Copy after login
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
How vux implements the pull-up refresh function
How jQuery implements image carousel
jQuery How to prevent the same event from being triggered repeatedly
The above is the detailed content of Detailed introduction to the basic use of NW.js. For more information, please follow other related articles on the PHP Chinese website!