NW.js是什么如何使用

本文主要和大家分享nw.js是什么如何使用?nw.js (原名 node-webkit)是一个基于 chromium 和 node.js 的应用运行时,通过它可以用 html 和 javascript 编写原生应用程序。它还允许您从 dom 调用 node.js 的模块 ,实现了一个用所有 web 技术来写原生应用程序的新的开发模式。

(1)以网络最流行的技术编写原生应用程序的新方法

(2)基于HTML5, CSS3, JS and WebGL而编写

(3)完全支持nodejs所有api及第三方模块

(4)可以使用DOM直接调用nodejs模块

(5)容易打包和分发

(6)支持运行环境包括32位和64位的Window、Linux和Mac OS 

使用方法如下:

一、下载nw

1.下载 NW.js(官网:http://nwjs.io/)

这里面normal这个算是运行时吧,sdk那个是一些工具箱,建议都下下来~

https://nwjs.io/downloads/

2.下载 Enigma Virtual Box(官网:http://enigmaprotector.com/)

二、配置 package.json 文件

{ "name": "nw-demo", "version": "0.0.1", "main": "index.html"}

登录后复制

更多的可用如下:

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

登录后复制

title : 字符串,设置默认 title。

width/height : 主窗口的大小。

toolbar : bool 值。是否显示导航栏。

icon : 窗口的 icon。

position :字符串。窗口打开时的位置,可以设置为“null”、“center”或者“mouse”。

min_width/min_height : 窗口的最小值。

max_width/max_height : 窗口显示的最大值。

resizable : bool 值。是否允许调整窗口大小。

always-on-top : bool 值。窗口置顶。

fullscreen : bool 值。是否全屏显示。

show_in_taskbar : 是否在任务栏显示图标。

frame : bool 值。如果设置为 false,程序将无边框显示。

“chromium-args” :”-allow-file-access-from-files” 相当于给谷歌浏览器添加启动参数一样,这行代码允许angularjs直接访问本地json文件。

三、生成exe

项目目录如下:

NW.js是什么如何使用

将html项目压缩成zip,并改名为nw,输入以下命令

copy /b nw.exe+app.nw firstApp.exe

登录后复制

四、打发包发布

打开 Enigma Virtual Box 程序(enigmavb.exe),界面应该是这样的:

NW.js是什么如何使用

然后在 Enter Input File Name 处选择上一步生成的 test.exe 文件,Enter Output Name 可以默认;

之后再点击下面的 Add 按钮,将 nwjs 文件夹(名称不一定是 nwjs ,就是最开始第一步 NW.js 环境的那个文件夹)下除 nw.exe 和 test.nw 以及 test.exe 之外的所有文件加载上,然后点击 Process ,等待执行成功即可,这时候会在相应的路径下生成一个新的 .exe 文件(我们暂且叫做 newtest.exe),此时的 newtest.exe 文件即可在任意的 Windows 环境下运行了,你可以拷贝给你的小伙伴去 Show 一下。

下面是nw使用过程中的一些坑

1.如果只希望当前应用获取焦点才执行快捷键,看看这个库用js设置快捷键

// 加载本地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不能对页面多次刷新,各种不正常,这是由于刷新页面后重新加载js文件对变量重新赋值引起的bug。 解决方案

nw.js 读取和保存文件

  nw.js实现文件读写 读取文件  保存文件 

//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!", function (err) { if (err) { alert("保存失败!"); } }); });

登录后复制

3.使用nwjs的’fs’直接保存cancas为本地图片,在网上找到的方法都是弹出选择框保存,但我需要直接保存图片到指定路径,不能弹出对话框让用户选择。kailniris给了一个解决方案,可行,代码如下:

var fs = require('fs');var c = document.getElementById("myCanvas");var ctx = c.getContext("2d");ctx.moveTo(0, 0);ctx.lineTo(200, 100);ctx.stroke();  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' }); }});

登录后复制

用html2canvas把html页面转换为图片,再把图片保存到本地。贴一下代码(需要导入html2canvas.js和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.在app.js里引用Node内置模块

//调用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.引用第三方模块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();//需要手动刷新  }  }); };

登录后复制

相关推荐:

nw.js的localStorage的物理储存实例详解

nw.js 如何禁止双击最大化?

nw.js实现类似微信的聊天软件_node.js

以上就是NW.js是什么如何使用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787823.html

(0)
上一篇 2025年3月8日 18:17:23
下一篇 2025年2月23日 05:27:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS实现多个彩色小球跟随鼠标移动实例代码

    本文主要和大家分享js实现多个彩色小球跟随鼠标移动实例代码,实现方法:每个小球移动都有自己的坐标,小球移动的同时,需要进行坐标传递,将第一个坐标依次传递给最后一个坐标,来实现小球跟着移动的效果。 实现代码: 小球运动 p { border-…

    2025年3月8日
    200
  • javascript中的require、import与export实例分享

    本文主要给大家介绍关于javascript中require、import与export的相关资料,文中通过示例代码介绍的非常详细,对打击大的学习或者工作具有一定的参考学习价值,希望能帮助到大家。 为什么有模块概念 理想情况下,开发者只需要实…

    2025年3月8日 编程技术
    200
  • JS手写parseInt的实例

    手写parseint的实现:要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用js原生的字符串转数字的api,比如number()本文主要给大家介绍了关于js实现手写parseint的相关内容,分享出来供大家参考学习,下面话不多…

    编程技术 2025年3月8日
    200
  • Js如何利用console计算代码运行时间

    如果学习前端一定时间以后,就会考虑性能方面的问题。那么问题来了,我们怎么计算出一段代码的运行时间呢?发现了个计算代码执行时间的方法,所以本文主要给大家介绍关于javascript利用console计算代码运行时间的相关资料,文中通过示例代码…

    编程技术 2025年3月8日
    200
  • 关于jQuery用$.ajax或$.getJSON实现跨域获取JSON数据的代码

    通过jquery可以跨域获取json数据,但必须弄清楚的是,jquery不可以跨域获取任意json格式的数据,必须要通过服务端输出特定的针对jquery跨域读取的json数据。你可能目前对此仍然毫无了解,没关系,本文将以最简单易懂的方式介绍…

    编程技术 2025年3月8日
    200
  • VsCode完成VueJs项目的教程

    本文主要介绍了vscode新建vuejs项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 使用vue-cli快速构建项目 ( vue-cli 是vue.js的脚手架,用于自动生成…

    2025年3月8日 编程技术
    200
  • javascript二维数组的面试题

    本文主要和大家分享一个关于javascript二维数组的面试题,希望能帮助到大家。给定一个二维数组,实现一个功能函数 fn,向这个函数中传递这个二维数组的一个坐标,如果这个坐标的值为 ”1“,将返回和这个坐标所有相连的并且坐标值为1坐标。 …

    编程技术 2025年3月8日
    200
  • vue-slicksort一个vue.js拖拽组件

    本文主要和大家分享vue-slicksort ,它是一个功能强大的可拖拽的vue.js组件。 它可以自动滚动,锁定坐标系。支持拖拽时,流畅的动画效果。可以支持水平,垂直或者网格的拖拽。支持触摸。希望本文能帮助到大家。 DEMO 安装 通过n…

    2025年3月8日
    200
  • JS中的BOM应用详解

    本文我们住要和大家分享js中的bom应用详解,我们曾经讲过js由三部分组成,其中一个部分就是bom,用于对浏览器进行操作。这节课我们主要就来介绍bom。 BOM基础 我们先来看一个BOM的最基础功能:打开、关闭窗口: 无标题文档 登录后复制…

    2025年3月8日
    200
  • Js简单实现返回上一页简洁介绍

    利用javascript实现返回上一页的方法很简单只需要一行js代码就可以搞定,不太了解js返回上一页的小伙伴们可以来看看,学习学习哦! 不再废话直接上代码: window.history.go(-1);  //返回上一页window.hi…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论