常见问题
除了官方内容外,还直接集合了各种常见方法,适用于初学者和懒癌;
Electron何时将Chrome升级为最新版本?
通常会在stable(稳定)版的Chrome发布后的两周内,不过由于工作量的问题,该时间并不能完全保证.
虽然我们只使用了稳定版Chrome,但是beta 或 dev 版中发布了重要的更新或修复时,我们会立即打上这个补丁.
更多细节,参考安全,本地功能和你的责任注意,该章节译者尚未精校,目前使用中文官译本
Electron何时将Node.js升级为最新版本?
通常会在最新版Node.js发布一个月之后,以此来避免Node.js刚发布后的常见bug.
Node.js的新特性一般是由V8升级引起的,由于Electron使用的是Chrome浏览器内置的V8,所以Electron中常常内置了新 Node.js 才有的部分特性.
如何在两个网页间共享数据?
要在网页(渲染器进程)之间共享数据,最简单的方法是使用浏览器中已经可以使用的HTML5 API,如Storage API, localStorage
, sessionStorage
, 和 [IndexedDB][indexed-db].
你也可以利用Electron的IPC机制实现,先将主进程中的对象存储为全局变量,再通过 electron
模块的 remote
属性从渲染器访问它们.
为什么应用窗口或托盘图标在一段时间后消失不见了?
这是因为用于存储窗口和托盘的变量被垃圾回收了,更多细节请阅读以下文章:
如果你只是需要快速修复这个问题的话,你可以通过下面的方式更改变量作用域,以避免这个变量被垃圾回收.
示例:
改成:
为什么在Electron中无法使用jQuery/RequireJS/Meteor/AngularJS ?
由于Electron集成了Node.js,所以在DOM中插入某些额外变量,比如 module
, exports
, require
.等等. 这将导致许多库不能正常运行,因为它们也要插入同名变量。
我们可以通过禁用 Node.js 来解决这个问题:
但是,如果你仍然需要Node.js 和 Electron 的 API,那么你在引入那些库之前将这些变量重命名,比如:
或者使用这个:
为什么 require('electron').xxx
结果是 undefined ?
require('electron').xxx
结果是 undefined ?使用Electron的内置模块时,你可能会遇到如下错误:
这是由于你在项目或全局中已安装了npm electron
模块,这些模块把Electron内置模块覆盖了.
你可以输出electron
模块的路径来验证是否使用了正确的内置模块:
然后,再检查一下格式是否是这样子的:
如果输出的路径类似 node_modules/electron/index.js
,那么你需要移除或重名npm的 electron
模块.
如果问题依旧.你可能需要仔细检查一下拼写或可能在错误的进程中使用了该模块.比如 electron.app
只能在主进程中使用,而 electron.webFrame
只能在渲染进程使用.
有哪些asar文件常用命令?
asar文件常用命令,所在目录运行以下命令:
更多asar用法,请移步应用分发
Electron是否可以创建可全透明并可穿透的窗口?
目前Electron有两个不足:
第一即无法创建可穿透的透明窗口(虽然可以通过禁用加速来实现,但得不偿失),这样限制了前台异形UI的发展。
第二点即尚未支持或以后可能也不支持对移动端平台的支持,只能是自己绕着路子的实现,这样也就增加了开发成本。
Electron自带的托盘右键菜单过丑,如何自定义托盘右键菜单?
Tray模块调用的是系统菜单,牺牲UI但强调了实用性.如果需要自定义菜单,有许多此类Node模块.此类问题你只需记得Electron不仅可以使用自身API创建相关内容,也可以充分利用Node API或相关模块,可以无限拓展.
当然你还可以使用以下方式轻松实现:
[indexed-db]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
Last updated