跳到主要内容

43 篇标记为“发布”的文章

关于新 Electron 版本的博客文章

查看所有标签

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

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

CSS properties in Styles tab

KeyboardEvent.code 属性

Chrome 48 添加了新的 code 属性,该属性在 KeyboardEvent 事件上可用,它将是按下的物理键,独立于操作系统键盘布局。

这应该使在您的 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');
渲染器进程 Require
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 上的 platform-theme-changed 事件,适用于 OS X

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

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

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

app.isDarkMode(),适用于 OS X

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

scroll-touch-beginscroll-touch-end 事件到 BrowserWindow,适用于 OS X

当滚轮事件阶段开始或结束时,会发出这些事件。

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

Electron 1.0 中即将到来的 API 更改

·4 分钟阅读

自 Electron 开始之初,追溯到它被称为 Atom-Shell 的时候,我们一直在尝试为 Chromium 的内容模块和原生 GUI 组件提供一个不错的跨平台 JavaScript API。API 最初是有机地开始的,随着时间的推移,我们进行了一些更改以改进初始设计。


现在随着 Electron 准备发布 1.0 版本,我们希望借此机会通过解决最后的 API 细节来进行更改。下面描述的更改包含在 0.35.x 中,旧的 API 报告弃用警告,以便您可以为未来的 1.0 版本做好准备。Electron 1.0 不会在几个月内发布,因此您有时间在这些更改变为破坏性更改之前进行更新。

弃用警告

默认情况下,如果您正在使用已弃用的 API,将显示警告。要关闭它们,您可以将 process.noDeprecation 设置为 true。要跟踪已弃用 API 用法的来源,您可以将 process.throwDeprecation 设置为 true 以抛出异常而不是打印警告,或者将 process.traceDeprecation 设置为 true 以打印弃用的跟踪。

使用内置模块的新方式

内置模块现在被分组到一个模块中,而不是分成独立的模块,因此您可以 在不与其他模块冲突的情况下 使用它们

var app = require('electron').app;
var BrowserWindow = require('electron').BrowserWindow;

旧的 require('app') 方式仍然支持向后兼容,但您也可以将其关闭

require('electron').hideInternalModules();
require('app'); // throws error.

一种更简单的方式来使用 remote 模块

由于使用内置模块的方式发生了变化,我们使得在渲染器进程中使用主进程端模块变得更加容易。您现在只需访问 remote 的属性即可使用它们

// New way.
var app = require('electron').remote.app;
var BrowserWindow = require('electron').remote.BrowserWindow;

而不是使用长的 require 链

// Old way.
var app = require('electron').remote.require('app');
var BrowserWindow = require('electron').remote.require('BrowserWindow');

拆分 ipc 模块

ipc 模块同时存在于主进程和渲染器进程中,并且 API 在每一侧都不同,这对于新用户来说非常令人困惑。我们在主进程中将模块重命名为 ipcMain,在渲染器进程中重命名为 ipcRenderer,以避免混淆

// In main process.
var ipcMain = require('electron').ipcMain;
// In renderer process.
var ipcRenderer = require('electron').ipcRenderer;

对于 ipcRenderer 模块,在接收消息时添加了一个额外的 event 对象,以匹配 ipcMain 模块中处理消息的方式

ipcRenderer.on('message', function (event) {
console.log(event);
});

标准化 BrowserWindow 选项

BrowserWindow 选项具有基于其他 API 选项的不同样式,并且由于名称中带有 -,因此在 JavaScript 中有点难以使用。它们现在已标准化为传统的 JavaScript 名称

new BrowserWindow({ minWidth: 800, minHeight: 600 });

遵循 DOM 的 API 名称约定

Electron 中的 API 名称过去更喜欢对所有 API 名称使用 camelCase,例如 UrlURL,但 DOM 有自己的约定,他们更喜欢 URL 而不是 Url,同时使用 Id 而不是 ID。我们已完成以下 API 重命名以匹配 DOM 的样式

  • Url 重命名为 URL
  • Csp 重命名为 CSP

当您的应用使用 Electron v0.35.0 时,由于这些更改,您会注意到很多弃用。修复它们的简单方法是将所有 Url 实例替换为 URL

Tray 的事件名称更改

Tray 事件名称的样式与其他模块略有不同,因此已完成重命名以使其与其他模块匹配。

  • clicked 重命名为 click
  • double-clicked 重命名为 double-click
  • right-clicked 重命名为 right-click

Electron 中的新功能

·2 分钟阅读

最近 Electron 有一些有趣的更新和演讲,这里有一个汇总。


来源

Electron 现在已更新到 Chrome 45,版本为 v0.32.0。其他更新包括...

更好的文档

new docs

我们已经重组和标准化了文档,使其看起来更好,阅读起来更好。还有社区贡献的文档翻译,如日语和韩语。

相关拉取请求:electron/electron#2028, electron/electron#2533, electron/electron#2557, electron/electron#2709, electron/electron#2725, electron/electron#2698, electron/electron#2649

Node.js 4.1.0

v0.33.0 起,Electron 附带 Node.js 4.1.0。

相关拉取请求:electron/electron#2817

node-pre-gyp

依赖于 node-pre-gyp 的模块现在可以在从源代码构建时针对 Electron 进行编译。

相关拉取请求:mapbox/node-pre-gyp#175

ARM 支持

Electron 现在为 ARMv7 上的 Linux 提供构建。它在 Chromebook 和 Raspberry Pi 2 等流行平台上运行。

相关问题:atom/libchromiumcontent#138, electron/electron#2094, electron/electron#366

Yosemite 风格的无边框窗口

frameless window

@jaanus 的补丁已合并,与其他内置 OS X 应用一样,允许在 OS X Yosemite 及更高版本上创建集成了系统交通灯的无边框窗口。

相关拉取请求:electron/electron#2776

Google 编程之夏打印支持

在 Google 编程之夏之后,我们合并了 @hokein 的补丁,以改进打印支持,并添加了将页面打印到 PDF 文件的功能。

相关问题:electron/electron#2677, electron/electron#1935, electron/electron#1532, electron/electron#805, electron/electron#1669, electron/electron#1835

Atom

Atom 现在已升级到 Electron v0.30.6,运行 Chrome 44。升级到 v0.33.0 正在 atom/atom#8779 上进行。

演讲

GitHub 用户 Amy PalamountainNordic.js 的演讲中对 Electron 进行了精彩的介绍。她还创建了 electron-accelerator 库。

Amy Palomountain 使用 Electron 构建原生应用

Atom 团队的 Ben Ogle 也在 YAPC Asia 上进行了 Electron 演讲

Ben Ogle 使用 Web 技术构建桌面应用

Atom 团队成员 Kevin Sawicki 和其他人在最近的 Bay Are Electron User Group 聚会上就 Electron 进行了演讲。 视频 已发布,以下是一些

Kevin Sawicki 的 Electron 历史

Ben Gotow 使 Web 应用感觉原生