Electron中文手册
  • 文档概述
  • 开发指南目录
  • 构建说明(Linux)
  • 构建说明(macOS)
  • 构建说明(Windows)
  • 构建系统概述
  • 编码规范
  • 在 macOS 中调试
  • 在 Windows 中调试
  • 在C ++代码中使用clang-format
  • 在调试器中设置符号服务器
  • 源代码目录结构
  • Chrome升级清单
  • Chromium 开发指南
  • V8 开发指南
  • 教程目录
    • 关于 Electron
    • Electron 版本说明
    • API弃用说明
    • 快速入门
    • 支持的平台
    • 桌面环境集成
    • 系统通知
    • 离屏渲染
    • 在线/离线事件检测
    • 多线程
    • REPL
    • 键盘快捷键
    • DevTools扩展
    • 使用原生模块
    • 使用 Pepper Flash 插件
    • 使用 Selenium 和 WebDriver
    • 使用 Widevine CDM 插件
    • 应用分发
    • 应用打包
    • 主进程调试
    • 使用 node-inspector 进行主进程调试
    • 使用 VSCode 进行主进程调试
    • Mac App Store应用提交指南
    • Windows App Store应用提交指南
    • 安全,本地功能和你的责任
    • Headless CI Systems 测试
  • API接口目录
    • API接口之公用接口
      • 应用语言
      • 开发概要
      • 专业术语
      • 常见问题
      • 环境变量
      • 快捷键字符串
      • 命令行
      • 客户端请求
      • 剪贴板
      • <File> H5 File文件操作
      • 无框窗口
      • <window.open> window.open打开新窗口或打开时传递消息
      • 沙盒选项
    • API接口之主进程接口
      • 整体控制
      • 全局快捷键
      • 图标创建与应用
      • 屏幕
      • 窗口
      • 菜单
      • 菜单项
      • 系统托盘
      • 网页内容
      • 从主进程到渲染进程的异步通信
      • 对话框
      • 创建和控制视图
      • 会话
      • 会话,缓存和代理等控制
      • 页面请求
      • HTTP/HTTPS请求处理
      • 协议的注册和处理
      • 使用系统默认应用程序管理文件或URL
      • 下载项管理
      • 进程控制
      • Chromium原生网络库
      • 获取系统首选项
      • 电源状态
      • 节能管理
      • 调试工具
      • 奔溃报告
      • 性能数据收集
      • 自动更新
      • TouchBar触摸条
      • TouchBar触摸条按钮
      • TouchBar触摸条拾色器
      • TouchBar触摸条分组
      • TouchBar触摸条scrubber
      • TouchBar触摸条分段控件
      • TouchBar触摸条label标签
      • TouchBar触摸条弹出框
      • TouchBar触摸条滑块
      • TouchBar触摸条间隔符
    • API接口之渲染进程接口
      • 页面渲染
      • <webview> webview标签
      • 渲染进程与主进程通信
      • 从渲染进程到主进程的异步通信
      • 子窗口
      • 捕获桌面资源
  • 结构列表
    • 蓝牙设备对象
    • 证书对象
    • 证书主体对象
    • Cookie对象
    • 崩溃报告对象
    • 桌面捕获源对象
    • 显示器对象
    • 打印机信息对象
    • 文件过滤器对象
    • 最近使用的项目
    • 常用列表项
    • CPU使用率对象即程序占用的CPU资源
    • IO值对象
    • 内存信息对象
    • 进程内存信息对象
    • 内存使用详细信息
    • Mime类型缓冲区
    • 矩形对象
    • 删除客户端证书对象
    • 删除密码对象
    • Scrubber项对象
    • 分段控制对象
    • 快捷方式对象
    • 任务对象
    • 缩略图工具栏按钮对象
    • 上传blob对象
    • 上传数据对象
    • 上传文件系统对象
    • 上传文件对象
    • 上传原始数据对象
Powered by GitBook
On this page
  • Electron何时将Chrome升级为最新版本?
  • Electron何时将Node.js升级为最新版本?
  • 如何在两个网页间共享数据?
  • 为什么应用窗口或托盘图标在一段时间后消失不见了?
  • 为什么在Electron中无法使用jQuery/RequireJS/Meteor/AngularJS ?
  • 为什么 require('electron').xxx 结果是 undefined ?
  • 有哪些asar文件常用命令?
  • Electron是否可以创建可全透明并可穿透的窗口?
  • Electron自带的托盘右键菜单过丑,如何自定义托盘右键菜单?

Was this helpful?

  1. API接口目录
  2. API接口之公用接口

常见问题

Previous专业术语Next环境变量

Last updated 4 years ago

Was this helpful?

除了官方内容外,还直接集合了各种常见方法,适用于初学者和懒癌;

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,如, , , 和 [IndexedDB][indexed-db].

你也可以利用Electron的IPC机制实现,先将主进程中的对象存储为全局变量,再通过 electron模块的 remote属性从渲染器访问它们.

// 在主进程中
global.sharedObject = {
  someProperty: 'default value'
}
// 在第一个页面中
require('electron').remote.getGlobal('sharedObject').someProperty = 'new value'
// 在第二个页面中
console.log(require('electron').remote.getGlobal('sharedObject').someProperty)

为什么应用窗口或托盘图标在一段时间后消失不见了?

这是因为用于存储窗口和托盘的变量被垃圾回收了,更多细节请阅读以下文章:

如果你只是需要快速修复这个问题的话,你可以通过下面的方式更改变量作用域,以避免这个变量被垃圾回收.

示例:

const {app, Tray} = require('electron')
app.on('ready', () => {
  const tray = new Tray('/path/to/icon.png')
  tray.setTitle('hello world')
})

改成:

const {app, Tray} = require('electron')
//let的作用即防止被垃圾回收
let tray = null
app.on('ready', () => {
  tray = new Tray('/path/to/icon.png')
  tray.setTitle('hello world')
})

为什么在Electron中无法使用jQuery/RequireJS/Meteor/AngularJS ?

由于Electron集成了Node.js,所以在DOM中插入某些额外变量,比如 module, exports, require.等等. 这将导致许多库不能正常运行,因为它们也要插入同名变量。

我们可以通过禁用 Node.js 来解决这个问题:

// 主进程中
const {BrowserWindow} = require('electron')
let win = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false
  }
})
win.show()

但是,如果你仍然需要Node.js 和 Electron 的 API,那么你在引入那些库之前将这些变量重命名,比如:

<head>
<script>
// 重命名 Electron自带的 require
window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;
</script>
<script type="text/javascript" src="jquery.js"></script>
</head>

或者使用这个:

<script src=`jquery.min.js`></script>
<script>if (typeof module === 'object') {window.jQuery = window.$ = module.exports;};</script>

为什么 require('electron').xxx 结果是 undefined ?

使用Electron的内置模块时,你可能会遇到如下错误:

> require('electron').webFrame.setZoomFactor(1.0)
Uncaught TypeError: Cannot read property 'setZoomLevel' of undefined

你可以输出electron模块的路径来验证是否使用了正确的内置模块:

console.log(require.resolve('electron'))

然后,再检查一下格式是否是这样子的:

"/path/to/Electron.app/Contents/Resources/atom.asar/renderer/api/lib/exports/electron.js"

如果输出的路径类似 node_modules/electron/index.js,那么你需要移除或重名npm的 electron模块.

npm uninstall electron
npm uninstall -g electron

如果问题依旧.你可能需要仔细检查一下拼写或可能在错误的进程中使用了该模块.比如 electron.app只能在主进程中使用,而 electron.webFrame只能在渲染进程使用.

有哪些asar文件常用命令?

asar文件常用命令,所在目录运行以下命令:

安装:$ npm install asar -g
压缩:$ asar pack app app.asar
解压:$ asar extract app.asar testpath

Electron是否可以创建可全透明并可穿透的窗口?

目前Electron有两个不足:

第一即无法创建可穿透的透明窗口(虽然可以通过禁用加速来实现,但得不偿失),这样限制了前台异形UI的发展。

第二点即尚未支持或以后可能也不支持对移动端平台的支持,只能是自己绕着路子的实现,这样也就增加了开发成本。

Electron自带的托盘右键菜单过丑,如何自定义托盘右键菜单?

Tray模块调用的是系统菜单,牺牲UI但强调了实用性.如果需要自定义菜单,有许多此类Node模块.此类问题你只需记得Electron不仅可以使用自身API创建相关内容,也可以充分利用Node API或相关模块,可以无限拓展.

当然你还可以使用以下方式轻松实现:

这是由于你在项目或全局中已安装了,这些模块把Electron内置模块覆盖了.

更多asar用法,请移步

[indexed-db]:

安全,本地功能和你的责任
Storage API
localStorage
sessionStorage
Memory Management
Variable Scope
npm electron 模块
应用分发
https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
image
image