通常来说,在稳定版的 Chrome 发布后两周内,我们会更新 Electron 内的 Chrome 版本。
我们只会使用 stable 版本的 Chrome。但如果在 beta 或 dev 版本中有一个重要的更新,我们会把补丁应用到现版本的 Chrome 上。
我们通常会在最新版的 Node.js 发布后一个月左右将 Electron 更新到这个版本的 Node.js。我们通过这种方式来避免新版本的 Node.js 带来的 bug(这种 bug 太常见了)。
Node.js 的新特性通常是由新版本的 V8 带来的。由于 Electron 使用的是 Chrome 浏览器中附带的 V8 引擎,所以 Electron 内往往已经 有了部分新版本 Node.js 才有的崭新特性。
在两个网页(渲染进程)间共享数据最简单的方法是使用浏览器中已经实现的 HTML5 API,比较好的方案是用 Storage API, localStorage
,sessionStorage
或者 IndexedDB。
你还可以用 Electron 内的 IPC 机制实现。将数据存在主进程的某个全局变量中,然后在多个渲染进程中使用 remote
模块来访问它。
// 在主进程中
global.sharedObject = {
someProperty: "default value"
};
// 在第一个页面中
require("remote").getGlobal("sharedObject").someProperty = "new value";
// 在第二个页面中
console.log(require("remote").getGlobal("sharedObject").someProperty);
这通常是因为用来存放窗口、托盘的变量被垃圾收集了。
你可以参考以下两篇文章来了解为什么会遇到这个问题。
如果你只是要一个快速的修复方案,你可以用下面的方式改变变量的作用域,防止这个变量被垃圾收集。
从
app.on("ready", function() {
var tray = new Tray("/path/to/icon.png");
})
改为
var tray = null;
app.on("ready", function() {
tray = new Tray("/path/to/icon.png");
})
因为 Electron 在运行环境中引入了 Node.js,所以在 DOM 中有一些额外的变量,比如 module
、exports
和 require
。这导致 了许多库不能正常运行,因为它们也需要将同名的变量加入运行环境中。
我们可以通过禁用 Node.js 来解决这个问题,用如下的方式:
// 在主进程中
var mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: false
}
});
假如你依然需要使用 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>
require("electron").xxx
的结果是 undefined?在使用 Electron 的提供的模块时,你可能会遇到和以下类似的错误:
> require("electron").webFrame.setZoomFactor(1.0);
Uncaught TypeError: Cannot read property "setZoomLevel" of undefined
这是因为你在项目中或者在全局中安装了npm 上获取的 electron
模块,它把 Electron 的内置模块覆写了。
你可以通过以下方式输出 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
如果你依然遇到了这个问题,你可能需要检查一下拼写或者是否在错误的进程中调用了这个模块。比如,require("electron").app
只能在主进程中使用, 然而 require("electron").webFrame
只能在渲染进程中使用。
过滤是从结果集中删除某些值或值范围的过程。 Tableau过滤功能允许使用字段值以及高级计算或基于上下文的过滤器的两种简单方案。...
介绍TextInput控件是一个文本输入控件,允许用户输入和编辑一行统一格式的文本。类声明以下是 spark.components.TextArea 类的声...
快捷键介绍Ctrl + F在当前文件进行文本查找 (必备)Ctrl + R/kdb在当前文件进行文本替换 (必备)Ctrl + Z/kdb撤销 (必备)Ctr...
ENDEND — 提交当前事务大纲END [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ]描述 END提交当前事务。所有该事务做的更改便得 对...
SECURITY LABEL — 定义或更改应用到一个对象的安全标签大纲SECURITY LABEL [ FOR provider ] ON{TABLE object_name |COLUMN tab...
前面几章我们学习了自动命令。执行下面命令::autocmd BufWrite * :echom "Writing buffer!"现在使用:write命令将当前缓冲区写入...
XSLT xsl:value-of 元素XSLTxsl:value-of元素有两个作用,你可以通过本节的内容对其进行了解。 XSLT 元素参考手册定义和用法 xsl...