JS开发桌面端应用程序教程

前言

本文为开发nw中遇到的各种问题,仅以记录供备忘以及遇到相同问题的人的一点点解决思路。

1. package.json中的window字段无效

原因:package.json中的window字段,只在main字段为*.html或是外部网址时有效,当为 *.js时是无效的。

{  "name": "blog",  "main": "http://php.cn/",//main为网址,下方的window设定有效  //"main": "index.html",//main为 *.html,下方的window设定有效  //"main": "index.js?1.1.11",//main为 *.js,下方的window设定无效!!    "version": "0.0.1",  "window": {"title": "Nw.js Demo",//如果 index.html没有title,则会显示这里的值"icon": "assest/img/logo.png",//标题栏图标"position": "center",//默认显示位置"width": 1280,"height": 680,"frame": true,//是否显示最外层的框架,设为false之后 窗口的最小化、最大化、关闭 就没有了"resizable": true,"min_width": 1028  },}

登录后复制

关于其他package.json中的可使用的配置见官网:

2. nw-builder一次只能打包一个项目

nw默认不包含打包成.exe文件的形式,遂nw-builder项目为自动将nw应用打包压缩成可执行文件的程序。
详见:

假设nw-builder的配置文件如下:

var nw = new NwBuilder({   version: '0.14.7',    files: './app/**',//nw应用项目目录   platforms: ['win32'], });

登录后复制

配置字段files指定了app文件夹下的所有文件,但app文件夹下存在两个项目:nw-demo和zfile-explorer
JS开发桌面端应用程序教程

对于这种情况nw-builder只会打包出按文件名排序的第一个文件夹项目:nw-demo
JS开发桌面端应用程序教程

3. 在nw中植入全局变量的方法

前提:需要在nw项目中的package.json中的main字段指定为*.js文件。或是指定本地的.html文件后再载入js文件

package.json文件{  "name": "nw-demo",  "version": "1.0.0",  "description": "",  "main": "./main.js?1.1.11",  "scripts": {"start":"cd ../../ & gulp nw"  },  ...}

登录后复制

在mian字段指定的js文件中,再使用nw.Window.open来载入指定本地页面或是外部网址,如:

main.js文件:nw.Window.open('./view/index.html', {height:600,width:800}, function (win) { });

登录后复制

在这个js文件中可以使用4种方法植入全局变量或全局方法:
1、将全局变量使用var方式声明赋值
2、将全局变量直接赋值,无定义
3、将全局变量挂载到window上
4、将全局变量挂载到global上

测试代码:

main.js文件//var定义方式var xxcanghai_1 = 1;//直接赋值方式xxcanghai_2 = 10;//挂载到window对象上window.xxcanghai_3 = 100;//挂载到global对象上global.xxcanghai_4 = 1000;

登录后复制

在用nw动态载入的页面中写入一下代码测试

./view/index.html文件   console.log(xxcanghai_1);//报错   console.log(window.xxcanghai_1);//undefined   console.log(global.xxcanghai_1);//1   console.log(xxcanghai_2);//报错   console.log(window.xxcanghai_2);//undefined   console.log(global.xxcanghai_2);//10   console.log(xxcanghai_3);//报错   console.log(window.xxcanghai_3);//undefined   console.log(global.xxcanghai_3);//100   console.log(xxcanghai_4);//报错   console.log(window.xxcanghai_4);//undefined   console.log(global.xxcanghai_4);//1000

登录后复制

结论
在动态加载的页面中,访问全局变量只能使用global.*的方式
之所以会这样是因为nw的运行环境是chromiumNodejs混合的。所以可以在网页js中执行Nodejs代码。
虽然可以但不应该!
从页面代码的责任一致性上不应该在网页代码中编写nodejs代码,遂应该将global中的对象写入每个网页的window对象中。之后页面代码再从window.*中调用

植入每个页面window中的方法

可利用nw的对package.json扩展字段的inject_js_start和inject_js_end来实现。

官方说明:inject_js_start: The injecting JavaScript code is to be executed after any files from css, but before any other DOM is constructed or any other script is run.inject_js_end: The injecting JavaScript code is to be executed after the document object is loaded, before onload event is fired. This is mainly to be used as an option of Window.open() to inject JS in a new window.http://docs.nwjs.io/en/latest/References/Manifest%20Format/#inject_js_start

inject_js_start字段指向本地的js文件,他可以在加载的任何页面的任何页面js执行前执行。

package.json文件:{  "name": "blog",  "version": "1.0.0",  "main": "./main.html",  "inject_js_start": "./js/inject_js_start.js?1.1.11",//设置所有页面前植入的js文件地址  "author": "php@gmail.com",  "license": "ISC",}

登录后复制

在植入的js文件中,将global中的变量赋值到当前页面window中

./js/inject_js_start.js文件://将node的global中的变量写入每个即将打开的页面的js的window对象中window["xxcanghai_1"] = global["xxcanghai_1"]

登录后复制

之后即可在任何nw打开的页面中通过window.xxcanghai_1来访问全局变量了。

4. nwjs主进程出现异常后不显示窗体

现象:nwjs主进程出现异常后不显示窗体,不弹出错误提示,也不会自动结束进程
原因:package.json文件中的main字段为.js文件,同时此js文件出现error时会出现此问题。
解决方案:package.json文件中的main字段使用.html文件,然后再载入要执行的nw主程序js文件即可。这样即使报错了也会显示出空窗口,同时也可以通过开发者工具栏查看问题原因,用户也可以关闭应用,不至于无法结束进程。

其他教程文章

使用 NW.js 将 Web 应用打包为桌面应用

以上就是JS开发桌面端应用程序教程的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月11日 04:31:13
下一篇 2025年2月28日 19:36:21

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

相关推荐

  • 用canvas+gif.js实现数字雨头像的方法

    前言 昨天 是1024程序员节,不知道各位看官过的怎么样。既然是过节,就要有个过节的样子,比方说,换个头像 以上就是用canvas+gif.js实现数字雨头像的方法 的详细内容,更多请关注【创想鸟】其它相关文章!

    编程技术 2025年3月11日
    200
  • html5存储页面或应用程序的私有自定义数据的data-* 属性

    实例 使用 data-* 属性来嵌入自定义数据: 登录后复制OwlSalmon Tarantula  浏览器支持 IE、Firefox、Chrome、Safari、Opera 所有主流浏览器都支持 data-* 属性。 定义和用法 data…

    编程技术 2025年3月11日
    200
  • 如何使用canvas画出平滑的曲线?(代码)

    本篇文章给大家带来的内容是关于如何使用canvans画出平滑的曲线?(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 背景概要 相信大家平时在学习canvas 或 项目开发中使用canvas的时候应该都遇到过这样的需…

    2025年3月11日 编程技术
    200
  • 利用HTML5的details, summary实现各种交互效果

    本篇文章给大家带来的内容是关于利用html5的details, summary实现各种交互效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本文利用的是HTML5 details, summary 首先 一、了解HTML…

    2025年3月11日 编程技术
    200
  • 如何提取图片的主题色?

    本篇文章给大家带来的内容是关于如何提取图片的主题色?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 工作时遇到一个需求:提取图片主题色,通过某种映射关系,选取ui给出的对应颜色。脑海中浮现如果只是纯前端如何实现呢? 一、思路…

    2025年3月11日
    200
  • HTML5和原生app如何进行交互?

    本篇文章给大家带来的内容是关于html5和原生app如何进行交互?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 h5与原生 app 交互的原理 现在移动端 web 应用,很多时候都需要与原生 app 进行交互、沟通(运行在…

    2025年3月11日
    200
  • HTML5中一些可以优化的细节介绍

    本篇文章给大家带来的内容是关于html5中一些可以优化的细节介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 介绍一些最近整理的优化细节。图片压缩什么的就不说了,这是优化必须做的。今天就说一下大家写代码时可以培养的优化的…

    编程技术 2025年3月11日
    200
  • 用canvas实现简单的下雪效果(附代码)

    本篇文章给大家带来的内容是关于用canvas实现简单的下雪效果(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 首先新建一个html文件,将body的背景设置为天空的那种深蓝色,并创建一个canvas,canvas…

    2025年3月11日
    200
  • svg和css3实现环形渐变进度条的代码示例

    本篇文章给大家带来的内容是关于svg和css3实现环形渐变进度条的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在负责的项目中,有一个环形渐变读取进度的效果的需求,于是在网上查阅相关资料整理一下。 代码如下: T…

    编程技术 2025年3月11日
    200
  • canvas中普通动效与粒子动效的实现 方法介绍(代码示例)

    本篇文章给大家带来的内容是关于canvas中普通动效与粒子动效的实现 方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 canvas用于在网页上绘制图像、动画,可以将其理解为画布,在这个画布上构建想要的效…

    2025年3月11日 编程技术
    200

发表回复

登录后才能评论