Home > Web Front-end > JS Tutorial > Detailed introduction to the basic use of NW.js

Detailed introduction to the basic use of NW.js

亚连
Release: 2018-06-08 15:05:25
Original
15010 people have browsed it

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"
}
Copy after login

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"
}
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

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

// 加载本地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);
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

<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(&#39;#readFile&#39;);
 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(&#39;#writeFile&#39;);
 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>
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:

var fs = require(&#39;fs&#39;);
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, &#39;base64&#39;, function (err) {
 if (err) {
 console.log("err", err);
 } else {
 return res.json({ &#39;status&#39;: &#39;success&#39; });
 }
});
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):

//要保存图片的文件路径
  var filePath = templateDir + filename + &#39;.html&#39;;
  //要保存的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 + &#39;.png&#39;, base64Data, &#39;base64&#39;, function (err) {
   if (err) {
    alert("保存模板失败!");
   }
   $(&#39;#model_template_name&#39;).modal("hide");
   layer.msg("模板已保存为" + filename);
   });
  }
  });
Copy after login

4. Reference the Node built-in module in app.js

//调用NodeJs内置模块
 $scope.fs = require(&#39;fs&#39;); 
     //读取配置文件
 $scope.readConfig = function () {
  try {
  var configStr = $scope.fs.readFileSync(config.weixin.path, &#39;utf8&#39;);
  console.log(configStr);
  var obj = eval(&#39;(&#39; + configStr + &#39;)&#39;);
  $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: &#39;utf8&#39;});
  return true;
  }
  catch (e) {
  console.log(e);
  alert("写入微信配置文件失败");
  return false;
  }
 }
Copy after login

5. Reference the third-party module wechat-api

//调用NodeJs第三方模块
 $scope.wechatApi = require(&#39;wechat-api&#39;);
 $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!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template