跳到主要内容

Electron 0.37 版本的新特性

·4 分钟阅读

Electron 0.37 最近发布,其中包括从 Chrome 47 到 Chrome 49 的重大升级,以及几个新的核心 API。这个最新版本引入了 Chrome 48Chrome 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');

也可以从开发工具的 Styles 部分编辑变量值,以获得快速反馈和调整

CSS properties in Styles tab

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 需要更简洁紧凑地进行赋值

浏览器进程 Requires
const { app, BrowserWindow, Menu } = require('electron');
渲染器进程 Requires
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 上的 showhide 事件

这些事件在窗口显示或隐藏时发出。

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');
});

app 上用于 OS Xplatform-theme-changed

当系统 深色模式 主题切换时,将发出此事件。

const { app } = require('electron');

app.on('platform-theme-changed', function () {
console.log(`Platform theme changed. In dark mode? ${app.isDarkMode()}`);
});

用于 OS Xapp.isDarkMode()

如果系统处于深色模式,则此方法返回 true,否则返回 false

用于 OS X 的 BrowserWindow 的 scroll-touch-beginscroll-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');
});