Electron 0.37 的新功能
Electron 0.37 最近 发布,包含从 Chrome 47 到 Chrome 49 的重大升级,以及几个新的核心 API。 此最新版本带来了在 Chrome 48 和 Chrome 49 中发布的所有新功能。 这包括 CSS 自定义属性、增加的 ES6 支持、KeyboardEvent 改进、Promise 改进,以及现在可在您的 Electron 应用中使用的许多其他新功能。
新内容
CSS 自定义属性
如果您使用过 Sass 和 Less 等预处理器语言,您可能熟悉变量,它允许您为颜色方案和布局等内容定义可重用的值。变量有助于保持您的样式表 DRY(不要重复自己)且更易于维护。
CSS 自定义属性类似于预处理变量,它们是可重用的,但它们也具有独特的品质,使其更加强大和灵活:它们可以使用 JavaScript 进行操作。 这种微妙但强大的功能允许动态更改视觉界面,同时仍然受益于 CSS 的硬件加速,并减少前端代码和样式表之间的代码重复。
有关 CSS 自定义属性的更多信息,请参阅 MDN 文章 和 Google Chrome 演示。
CSS 变量的应用
让我们通过一个简单的变量示例来演示,该示例可以在您的应用中实时调整。
:root {
--awesome-color: #a5ecfa;
}
body {
background-color: var(--awesome-color);
}
变量值可以直接在 JavaScript 中检索和更改
// Get the variable value ' #A5ECFA'
let color = window
.getComputedStyle(document.body)
.getPropertyValue('--awesome-color');
// Set the variable value to 'orange'
document.body.style.setProperty('--awesome-color', 'orange');
变量值也可以从开发工具的样式部分进行编辑,以获得快速反馈和调整

KeyboardEvent.code 属性
Chrome 48 为 KeyboardEvent 事件添加了新的 code 属性,该属性将是按下的物理键,与操作系统键盘布局无关。
这应该能使您的 Electron 应用中自定义键盘快捷键的实现更准确,并在不同机器和配置上更一致。
window.addEventListener('keydown', function (event) {
console.log(`${event.code} was pressed.`);
});
请查看 这个示例 以查看其效果。
Promise 拒绝事件
Chrome 49 添加了两个新的 window 事件,允许您在未处理的 Promise 被拒绝时收到通知。
window.addEventListener('unhandledrejection', function (event) {
console.log('A rejected promise was unhandled', event.promise, event.reason);
});
window.addEventListener('rejectionhandled', function (event) {
console.log('A rejected promise was handled', event.promise, event.reason);
});
请查看 这个示例 以查看其效果。
V8 中的 ES2015 更新
现在在 Electron 中的 V8 版本包含 91% 的 ES2015。 以下是一些您可以开箱即用的一些有趣的新增功能——无需标志或预编译器
默认参数
function multiply(x, y = 1) {
return x * y;
}
multiply(5); // 5
解构赋值
Chrome 49 添加了 解构赋值,使分配变量和函数参数更加容易。
现在,Electron 的 require 语句可以更清晰、更简洁地进行赋值
浏览器进程依赖
const { app, BrowserWindow, Menu } = require('electron');
渲染器进程依赖
const { dialog, Tray } = require('electron').remote;
其他示例
// Destructuring an array and skipping the second element
const [first, , last] = findAll();
// Destructuring function parameters
function whois({ displayName: displayName, fullName: { firstName: name } }) {
console.log(`${displayName} is ${name}`);
}
let user = {
displayName: 'jdoe',
fullName: {
firstName: 'John',
lastName: 'Doe',
},
};
whois(user); // "jdoe is John"
// Destructuring an object
let { name, avatar } = getUser();
新的 Electron API
以下是一些新的 Electron API,您可以在 Electron 版本 的发行说明中查看每个新的 API。
BrowserWindow 上的 show 和 hide 事件
当窗口显示或隐藏时会发出这些事件。
const { BrowserWindow } = require('electron');
let window = new BrowserWindow({ width: 500, height: 500 });
window.on('show', function () {
console.log('Window was shown');
});
window.on('hide', function () {
console.log('Window was hidden');
});
用于 OS X 的 app 上的 platform-theme-changed
当系统的 深色模式 主题被切换时,将发出此事件。
const { app } = require('electron');
app.on('platform-theme-changed', function () {
console.log(`Platform theme changed. In dark mode? ${app.isDarkMode()}`);
});
用于 OS X 的 app.isDarkMode()
如果系统处于深色模式,此方法将返回 true,否则返回 false。
用于 OS X 的 BrowserWindow 上的 scroll-touch-begin 和 scroll-touch-end 事件
当滚动轮事件阶段开始或结束时会发出这些事件。
const { BrowserWindow } = require('electron');
let window = new BrowserWindow({ width: 500, height: 500 });
window.on('scroll-touch-begin', function () {
console.log('Scroll touch started');
});
window.on('scroll-touch-end', function () {
console.log('Scroll touch ended');
});
