跳至主要內容

43 篇標記為「Release」的文章

關於全新 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');

也可以從開發工具的 Styles 區段編輯變數值,以獲得快速回饋和調整

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 現在需要更簡潔和更緊湊的賦值

瀏覽器程序 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

當系統的 Dark Mode 主題切換時,會發出此事件。

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

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

app.isDarkMode() 適用於 OS X

如果系統處於 Dark Mode,此方法會傳回 true,否則傳回 false

scroll-touch-beginscroll-touch-end 事件至適用於 OS X 的 BrowserWindow

當滾輪事件階段開始或結束時,會發出這些事件。

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 的有趣更新和演講,以下是摘要。


來源

截至 v0.32.0,Electron 現在已更新至 Chrome 45。其他更新包括...

更佳的文件

new docs

我們已重新架構並標準化文件,使其看起來更好、讀起來更順暢。還有社群貢獻的文件翻譯,例如日文和韓文。

相關的提取請求:electron/electron#2028electron/electron#2533electron/electron#2557electron/electron#2709electron/electron#2725electron/electron#2698electron/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#138electron/electron#2094electron/electron#366

Yosemite 風格的無邊框視窗

frameless window

@jaanus 提供的修補程式已合併,與其他內建 OS X 應用程式一樣,允許在 OS X Yosemite 及更高版本上建立整合系統交通號誌的無邊框視窗。

相關的提取請求:electron/electron#2776

Google Summer of Code 列印支援

在 Google Summer of Code 之後,我們合併了 @hokein 提供的修補程式,以改進列印支援,並新增將頁面列印到 PDF 檔案的功能。

相關問題:electron/electron#2677electron/electron#1935electron/electron#1532electron/electron#805electron/electron#1669electron/electron#1835

Atom

Atom 現在已升級到執行 Chrome 44 的 Electron v0.30.6。升級到 v0.33.0 正在 atom/atom#8779 上進行中。

演講

GitHub 使用者 Amy PalamountainNordic.js 的演講中精彩地介紹了 Electron。她還建立了 electron-accelerator 程式庫。

Amy Palomountain 的使用 Electron 建置原生應用程式

同樣在 Atom 團隊中的 Ben OgleYAPC Asia 上進行了 Electron 演講

Ben Ogle 的使用 Web 技術建置桌面應用程式

Atom 團隊成員 Kevin Sawicki 和其他人在最近的 Bay Are Electron User Group 聚會上進行了關於 Electron 的演講。影片已發布,以下是一些

Kevin Sawicki 的 Electron 歷史

Ben Gotow 的讓 Web 應用程式感覺像原生應用程式