Home >Web Front-end >JS Tutorial >Detailed introduction to the basic use of NW.js
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
{ "name": "nw-demo", "version": "0.0.1", "main": "index.html" }More available are as follows:
{ "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" }
3. Generate exe
The project directory is as follows:
copy /b nw.exe+app.nw firstApp.exe
4. Release the package
Open Enigma Virtual Box program (enigmavb.exe), the interface should be like this: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// 加载本地ui库 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);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. Solutionnw.js Read and save files
<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> //nw.js提供的读写文件模块 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; //把hello写入文件 fs.writeFile(filePath, "Hello!\n", function (err) { if (err) { alert("保存失败!"); } }); }); </script> </body> </html>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:
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' }); } });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):
//要保存图片的文件路径 var filePath = templateDir + filename + '.html'; //要保存的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); }); } });4. Reference the Node built-in module in app.js
//调用NodeJs内置模块 $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; } }5. Reference the third-party module wechat-api
//调用NodeJs第三方模块 $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();//需要手动刷新 } }); };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!