跳至主要內容

42 篇標記為「Release」的文章

關於新 Electron 版本的部落格文章

檢視所有標籤

新的 Electron 發佈節奏

·3 分鐘閱讀
⚡️ 更新 (2021-07-14):我們速度更快了!

在 2021 年第三季,Chrome 團隊將其發佈節奏從每 6 週縮短為每 4 週。Electron 的發佈也隨之調整。請閱讀更新的8 週節奏部落格文章,以取得最新的資訊!

🎉 Electron 將改為每 12 週發佈一個新的主要穩定版本!🎉


⚡️ 哇,速度真快!但為什麼呢?

簡單來說,Chromium 不會停止發佈,因此 Electron 也不會減慢速度。

Chromium 按照一致的 6 週時間表發佈。為了在 Electron 中提供最新版本的 Chromium,我們的時間表需要與他們的保持一致。有關 Chromium 發佈週期的更多資訊,請參閱此處

🚀 為什麼是每 12 週?

每 6 週,就會有一個新的 Chromium 版本發佈,其中包含新功能、錯誤修正/安全性修正以及 V8 改進。Electron 的使用者一直明確表示希望及時獲得這些變更,因此我們調整了穩定版本的發佈日期,以符合每隔一個 Chromium 穩定版本。首先,Electron v6.0.0 將包含 M76,並計劃於2019 年 7 月 30 日穩定發佈,這與 Chromium M76 的發佈日期相同。

🚧 這對我和我的 Electron 應用程式意味著什麼?

您將比以往更快地存取新的 Chromium 和 V8 功能與修正。重要的是,您還將知道這些新變更何時會推出,因此您將能夠比以往更好地規劃。

Electron 團隊將繼續支援最新的三個主要版本。例如,當v6.0.0 於 2019 年 7 月 30 日穩定發佈時,我們將支援 v6.x、v5.x 和 v4.x,而 v3.x 將達到生命週期結束。

💬 應用程式回饋計畫

請考慮加入我們的應用程式回饋計畫,以幫助我們測試 Beta 版本和穩定性。參與此計畫的專案會在其應用程式上測試 Electron Beta 版本;作為回報,他們發現的新錯誤將優先用於穩定版本。

📝 Electron 版本發佈簡史

v3.0.0 之前的穩定版本決策沒有遵循時間表。我們在專案中加入了 v3.0.0 和 v4.0.0 的內部時間表。今年稍早,我們決定首次公開Electron v5.0.0的穩定發佈日期。宣布穩定發佈日期整體而言獲得正面迴響,我們很高興能繼續為未來版本執行此操作。

為了更好地簡化這些與升級相關的工作,我們的升級發佈工作小組已在我們的治理系統中建立。它們使我們能夠更好地優先處理和委派這項工作,我們希望這會在每個後續版本中變得更加明顯。

這裡說明我們的新節奏與 Chromium 的節奏相比。

line graph comparing Electron versus Chromium versions

📨 如果您有任何問題,請寄信至 info@electronjs.org

Electron 5.0.0

·閱讀時間 4 分鐘

Electron 團隊很高興宣布 Electron 5.0.0 的發布!您可以使用 npm 透過 npm install electron@latest 安裝,或從我們的發佈頁面下載 tarball。此版本包含多項升級、修復和新功能。我們迫不及待想看看您用它們建構出什麼!請繼續閱讀以了解此發佈的詳細資訊,並分享您的任何回饋!


新功能?

Electron 的大部分功能由 Chromium、Node.js 和 V8 的核心元件提供。Electron 會與這些專案保持同步更新,為我們的使用者提供新的 JavaScript 功能、效能改進和安全性修復。這些套件在 Electron 5 中都有主要版本升級

Electron 5 也包含針對 Electron 特定 API 的改進。以下是主要變更的摘要;如需完整的變更清單,請查看Electron v5.0.0 發佈說明

Promise 化

Electron 5 繼續Promise 化倡議,將 Electron 的基於回呼的 API 轉換為使用 Promise。這些 API 已針對 Electron 5 進行轉換

  • app.getFileIcon
  • contentTracing.getCategories
  • contentTracing.startRecording
  • contentTracing.stopRecording
  • debugger.sendCommand
  • Cookies API
  • shell.openExternal
  • webContents.loadFile
  • webContents.loadURL
  • webContents.zoomLevel
  • webContents.zoomFactor
  • win.capturePage

macOS 的系統色彩存取

這些函式已在 systemPreferences 中變更或新增,以存取 macOS 系統的色彩

  • systemPreferences.getAccentColor
  • systemPreferences.getColor
  • systemPreferences.getSystemColor

處理程序記憶體資訊

已新增函式 process.getProcessMemoryInfo 以取得目前處理程序的記憶體使用統計資料。

針對遠端 API 的其他篩選

為了改善 remote API 的安全性,已新增遠端事件,以便可以篩選 remote.getBuiltinremote.getCurrentWindowremote.getCurrentWebContents<webview>.getWebContents

BrowserWindow 上的多個 BrowserView

BrowserWindow 現在支援在同一個 BrowserWindow 中管理多個 BrowserView。

重大變更

已封裝應用程式的預設值

封裝的應用程式現在的行為將與預設應用程式相同:除非應用程式有應用程式選單,否則將建立預設應用程式選單,並且除非應用程式處理該事件,否則將自動處理 window-all-closed 事件。

混合沙箱

現在預設啟用混合沙箱模式。以 sandbox: true 啟動的渲染器現在將會實際沙箱化,而之前只有在也啟用混合沙箱模式時才會沙箱化。

安全性改進

現在 nodeIntegrationwebviewTag 的預設值為 false,以改善安全性。

拼字檢查器現在是非同步的

已變更拼字檢查 API,以提供非同步結果

已棄用

以下 API 在 Electron 5.0.0 中已新增為已棄用,並計劃在 6.0.0 中移除

適用於 arm 和 arm64 的 Mksnapshot 二進位檔

適用於 arm 和 arm64 的 mksnapshot 原生二進位檔已棄用,並將在 6.0.0 中移除。可以使用 x64 二進位檔為 arm 和 arm64 建立快照。

WebContents 上的 ServiceWorker API

已棄用 WebContents 上的 ServiceWorker API,以準備移除它們。

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

使用沙箱化的 webContents 的自動模組

為了改善安全性,以下模組已棄用,不再直接透過 require 使用,而必須透過沙箱化的 webContents 中的 remote.require 包含

  • electron.screen
  • child_process
  • fs
  • os
  • path

webFrame 隔離世界 API

webFrame.setIsolatedWorldContentSecurityPolicywebFrame.setIsolatedWorldHumanReadableNamewebFrame.setIsolatedWorldSecurityOrigin 已棄用,改用 webFrame.setIsolatedWorldInfo

混合沙箱

enableMixedSandbox--enable-mixed-sandbox 命令列開關仍然存在以確保相容性,但已棄用且沒有作用。

終止對 2.0.x 的支援

根據我們的支援版本政策,2.0.x 已達到生命週期結束。

應用程式意見反應計畫

我們繼續使用我們的應用程式意見反應計畫進行測試。參與此計畫的專案會在他們的應用程式上測試 Electron Beta 版;反過來,他們發現的新錯誤會優先用於穩定版。如果您想參與或了解更多資訊,請查看我們關於該計畫的部落格文章

下一步

短期內,您可以期望團隊繼續專注於跟上組成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發進度。雖然我們謹慎不對發佈日期做出承諾,但我們的計畫是每季發佈帶有這些元件新版本的新主要 Electron 版本。暫定的 6.0.0 時程會標示出 Electron 6 開發生命週期中的重要日期。此外,請參閱我們的版本控制文件,以取得有關 Electron 中版本控制的更多詳細資訊。

如需有關即將推出的 Electron 版本中計劃的重大變更的資訊,請參閱我們計劃的重大變更文件

Node.js 原生插件和 Electron 5.0

·閱讀時間 2 分鐘

如果您在使用 Electron 5.0 時遇到使用原生 Node.js 附加元件的問題,則它有可能需要更新才能使用最新版本的 V8。


再見 v8::Handle,您好 v8::Local

2014 年,V8 團隊棄用 v8::Handle,改用 v8::Local 作為本機控制代碼。Electron 5.0 包含一個最終完全移除 v8::Handle 的 V8 版本,並且仍然使用它的原生 Node.js 附加元件必須更新才能與 Electron 5.0 一起使用。

所需的程式碼變更很少,但是 每個 仍然使用 v8::Handle 的原生 Node 模組都無法使用 Electron 5.0 進行建構,並且需要修改。好消息是,Node.js v12 也將包含此 V8 變更,因此無論如何,任何使用 v8::Handle 的模組都需要更新才能使用即將推出的 Node 版本。

我維護一個原生附加元件,我該如何協助?

如果您維護 Node.js 的原生附加元件,請確保將所有出現的 v8::Handle 替換為 v8::Local。前者只是後者的別名,因此無需進行其他更改來解決這個特定問題。

您可能也會對 N-API 感興趣,它作為 Node.js 的一部分,與 V8 分開維護,旨在使原生附加元件免受底層 JavaScript 引擎變更的影響。您可以在 Node.js 網站上的 N-API 文件中找到更多資訊。

救命啊!我在應用程式中使用原生附加元件,但它無法運作!

如果您在應用程式中使用 Node.js 的原生附加元件,而該原生附加元件因這個問題而無法建置,請與該附加元件的作者聯繫,看看他們是否已發布修復此問題的新版本。如果沒有,聯絡作者(或開啟 Pull Request!)可能是您最好的選擇。

Electron v5.0.0 時間軸

·閱讀時間 2 分鐘

Electron 非常興奮地宣布,我們首次公開我們的發布時程,從 v5.0.0 開始。這是我們擁有公開、長期時程的第一步。


如同我們在 v4.0.0 穩定版本部落格文章中提到的,我們計劃約每季發布一次,以保持與 Chromium 版本更接近的節奏。Chromium 發布新版本的速度非常快 - 每 6 週一次。

看看 Electron 與 Chromium 並排的進展情況

line graph comparing Electron versus Chromium versions

在 2018 年的下半年,我們的首要任務是加快發布速度並更接近 Chromium。我們透過堅持預定的時程來獲得成功。Electron 3.0.0 和 4.0.0 的發布時程為每個版本 2-3 個月。我們對繼續以這種速度發布 5.0.0 及更高版本感到樂觀。隨著約每季一次的 Electron 主要版本發布,我們現在與 Chromium 的發布節奏保持一致。領先於 Chromium 穩定版本始終是我們的目標,我們正在朝這個方向邁進。

我們很樂意像 Node.jsChromium 一樣承諾未來的日期,但我們尚未達到那一步。我們樂觀地認為,我們未來將達到長期時程。

考慮到這一點,我們正在邁出第一步,公開發布 v5.0.0 的發布時程。您可以在這裡找到它。

為了幫助我們測試 beta 版本並使其穩定,請考慮加入我們的應用程式回饋計畫

Electron 4.0.0

·閱讀時間 6 分鐘

Electron 團隊很高興地宣布,Electron 4 的穩定版本現已推出!您可以從 electronjs.org 安裝它,或者透過 npm 使用 npm install electron@latest 安裝。該版本包含大量升級、修復和新功能,我們迫不及待地想看看您用它們構建出什麼。閱讀更多關於此版本的詳細資訊,並在您探索時分享您有的任何回饋!


新功能?

Electron 的大部分功能由 Chromium、Node.js 和 V8 提供,這些是構成 Electron 的核心元件。因此,Electron 團隊的一個主要目標是盡可能跟上這些專案的變更,讓構建 Electron 應用程式的開發人員可以使用新的網路和 JavaScript 功能。為此,Electron 4 具有這些元件的主要版本升級;Electron v4.0.0 包括 Chromium 69.0.3497.106、Node 10.11.0 和 V8 6.9.427.24

此外,Electron 4 還包含針對 Electron 特定 API 的變更。您可以在下方找到 Electron 4 中主要變更的摘要;如需完整的變更清單,請查看Electron v4.0.0 版本說明

停用 remote 模組

您現在可以為了安全原因停用 remote 模組。該模組可以針對 BrowserWindowwebview 標籤停用。

// BrowserWindow
new BrowserWindow({
webPreferences: {
enableRemoteModule: false
}
})

// webview tag
<webview src="http://www.google.com/" enableremotemodule="false"></webview>

請參閱BrowserWindow<webview> 標籤文件以取得更多資訊。

篩選 remote.require() / remote.getGlobal() 請求

如果您不想完全停用渲染器處理程序或 webview 中的 remote 模組,但希望額外控制哪些模組可以透過 remote.require 請求,此功能很有用。

當模組透過渲染器處理程序中的 remote.require 請求時,會在app 模組上引發 remote-require 事件。您可以在事件(第一個引數)上呼叫 event.preventDefault(),以防止載入模組。發生請求的 WebContents 執行個體作為第二個引數傳遞,模組的名稱作為第三個引數傳遞。相同的事件也會在 WebContents 執行個體上發出,但在這種情況下,唯一的引數是事件和模組名稱。在這兩種情況下,您都可以透過設定 event.returnValue 的值來傳回自訂值。

// Control `remote.require` from all WebContents:
app.on('remote-require', function (event, webContents, requestedModuleName) {
// ...
});

// Control `remote.require` from a specific WebContents instance:
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
// ...
},
);

類似地,當呼叫 remote.getGlobal(name) 時,會引發 remote-get-global 事件。這與 remote-require 事件的運作方式相同:呼叫 preventDefault() 以防止傳回全域,並設定 event.returnValue 以傳回自訂值。

// Control `remote.getGlobal` from all WebContents:
app.on(
'remote-get-global',
function (event, webContents, requrestedGlobalName) {
// ...
},
);

// Control `remote.getGlobal` from a specific WebContents instance:
browserWin.webContents.on(
'remote-get-global',
function (event, requestedGlobalName) {
// ...
},
);

如需更多資訊,請參閱以下文件

透過 JavaScript 存取「關於」面板

在 macOS 上,您現在可以呼叫 app.showAboutPanel() 來以程式方式顯示「關於」面板,就像按一下透過 {role: 'about'} 建立的選單項目一樣。請參閱showAboutPanel 文件以取得更多資訊。

控制 WebContents 背景節流

WebContents 執行個體現在具有 setBackgroundThrottling(allowed) 方法,可在頁面背景化時啟用或停用計時器和動畫的節流。

let win = new BrowserWindow(...)
win.webContents.setBackgroundThrottling(enableBackgroundThrottling)

請參閱setBackgroundThrottling 文件以取得更多資訊。

重大變更

不再支援 macOS 10.9

Chromium 不再支援 macOS 10.9 (OS X Mavericks),因此Electron 4.0 及更高版本也不再支援它

單一執行個體鎖定

先前,為了使您的應用程式成為單一執行個體應用程式(確保在任何給定時間僅執行一個應用程式執行個體),您可以使用 app.makeSingleInstance() 方法。從 Electron 4.0 開始,您必須改用 app.requestSingleInstanceLock()。此方法的傳回值表示您的應用程式的此執行個體是否成功取得鎖定。如果它未能取得鎖定,您可以假設您的應用程式的另一個執行個體已在執行並取得鎖定,然後立即退出。

如需使用 requestSingleInstanceLock() 的範例,以及關於各種平台上細微行為的資訊,請參閱 app.requestSingleInstanceLock() 和相關方法的文件,以及second-instance 事件

win_delay_load_hook

當為 Windows 建置原生模組時,模組的 binding.gyp 中的 win_delay_load_hook 變數必須為 true(這是預設值)。如果不存在此勾點,則原生模組將無法在 Windows 上載入,並顯示類似 Cannot find module 的錯誤訊息。請參閱原生模組指南以取得更多資訊。

已棄用

以下重大變更計劃用於 Electron 5.0,因此在 Electron 4.0 中已棄用。

nativeWindowOpen 開啟的視窗停用 Node.js 整合

從 Electron 5.0 開始,使用 nativeWindowOpen 選項開啟的子視窗將永遠停用 Node.js 整合。

webPreferences 預設值

當使用 webPreferences 選項設定建立新的 BrowserWindow 時,以下 webPreferences 選項的預設值已被棄用,並改為以下列出的新預設值。

屬性已棄用的預設值新預設值
contextIsolationfalsetrue
nodeIntegrationtruefalse
webviewTag如果已設定 nodeIntegration 的值,否則為 truefalse

請注意:目前存在 已知錯誤 (#9736),如果 contextIsolation 啟用,則會導致 webview 標籤無法正常運作。請密切關注 GitHub 上的問題以獲取最新資訊!

Electron 安全文件中了解更多關於 context isolation、Node 整合和 webview 標籤的資訊。

Electron 4.0 仍將使用目前的預設值,但如果您沒有明確傳遞這些選項的值,您將會看到棄用警告。為了讓您的應用程式為 Electron 5.0 做好準備,請為這些選項使用明確的值。請參閱 BrowserWindow 文件,以了解每個選項的詳細資訊。

webContents.findInPage(text[, options])

medialCapitalAsWordStartwordStart 選項已棄用,因為它們已在上游移除。

應用程式意見反應計畫

我們在 Electron 3.0 開發期間建立的 應用程式回饋計畫 非常成功,因此我們在 4.0 的開發過程中也持續進行。我們要向 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp 和其他計畫成員在 4.0 beta 週期中的參與表示衷心的感謝。若要了解更多關於應用程式回饋計畫的資訊並參與未來的 beta 版本,請查看我們關於該計畫的部落格文章

下一步

短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。雖然我們謹慎地不對發布日期做出承諾,但我們的計畫是每季度左右發布包含這些元件新版本的新主要 Electron 版本。請參閱我們的版本控制文件,以了解更多關於 Electron 版本控制的詳細資訊。

如需有關即將推出的 Electron 版本中計劃的重大變更的資訊,請參閱我們計劃的重大變更文件

Electron 3.0.0

·閱讀時間 4 分鐘

Electron 團隊很高興宣布,Electron 3 的第一個穩定版本現在可從 electronjs.org 和透過 npm install electron@latest 取得!它包含大量的升級、修復和新功能,我們迫不及待地想看看您使用它們構建什麼。以下是關於此版本的詳細資訊,我們歡迎您在探索時提供回饋。


發布流程

在進行 v3.0.0 的開發時,我們試圖透過正式化逐步 beta 版本的回饋進度,來更實際地定義穩定版本的標準。如果沒有我們的 應用程式回饋計畫合作夥伴,他們在 beta 週期中提供了早期測試和回饋,v3.0.0 將不可能實現。感謝 Atlassian、Atom、Microsoft Teams、Oculus、OpenFin、Slack、Symphony、VS Code 和其他計畫成員的工作。如果您想參與未來的 beta 版本,請寄信給我們:info@electronjs.org

變更 / 新功能

Electron 工具鏈的幾個重要部分的主要升級,包括 Chrome v66.0.3359.181、Node v10.2.0 和 V8 v6.6.346.23

  • [#12656] feat: app.isPackaged
  • [#12652] feat: app.whenReady()
  • [#13183] feat: process.getHeapStatistics()
  • [#12485] feat: win.moveTop() 將視窗 z 順序移至頂層
  • [#13110] feat: TextField 和 Button API
  • [#13068] feat: 用於動態日誌控制的 netLog API
  • [#13539] feat: 在沙箱渲染器中啟用 webview
  • [#14118] feat: fs.readSync 現在可以處理大型檔案
  • [#14031] feat: node fs 包裝器,使 fs.realpathSync.nativefs.realpath.native 可用

重大 API 變更

  • [#12362] feat: 更新選單項目順序控制
  • [#13050] refactor: 移除已記錄的已棄用 API
    • 請參閱 文件 以了解更多詳細資訊
  • [#12477] refactor: 移除 did-get-response-detailsdid-get-redirect-request 事件
  • [#12655] feat: 預設停用拖放導覽
  • [#12993] feat: 必須使用 Node v4.x 或更高版本才能使用 electron npm 模組
  • [#12008 #12140 #12503 #12514 #12584 #12596 #12637 #12660 #12696 #12716 #12750 #12787 #12858] refactor: NativeWindow
  • [#11968] refactor: menu.popup()
  • [#8953] feat: 不再使用 JSON 發送 ipcRenderer.sendSync 的結果
  • [#13039] feat: 預設忽略 URL 後面的命令列引數
  • [#12004] refactor: 將 api::Window 重新命名為 api::BrowserWindow
  • [#12679] feat: 視覺縮放現在預設關閉
  • [#12408] refactor: 將應用程式指令 media-play_pause 重新命名為 media-play-pause

macOS

  • [#12093] feat: 工作區通知支援
  • [#12496] feat: tray.setIgnoreDoubleClickEvents(ignore) 忽略系統匣雙擊事件。
  • [#12281] feat: macOS 上的滑鼠前進功能
  • [#12714] feat: 螢幕鎖定/解鎖事件

Windows

  • [#12879] feat: 新增螢幕座標轉換的 DIP 轉換

請注意:在執行此版本後切換到舊版本的 Electron,您將需要清除使用者資料目錄,以避免舊版本崩潰。您可以透過執行 console.log(app.getPath("userData")) 來取得使用者資料目錄,或參閱 文件 以了解更多詳細資訊。

錯誤修復

  • [#13397] fix: fs.statSyncNoException 擲回例外狀況的問題
  • [#13476, #13452] fix: 加載具有 jquery 的網站時崩潰
  • [#14092] fix: net::ClientSocketHandle 解構函式中的崩潰
  • [#14453] fix: 立即通知焦點變更,而不是在下一個刻度

MacOS

  • [#13220] fix: 允許在 <input file="type"> 開啟檔案對話方塊中選取套件的問題
  • [#12404] fix: 使用非同步對話方塊時封鎖主處理序的問題
  • [#12043] fix: 關聯選單點擊回呼
  • [#12527] 修復:重複使用觸控列項目時的事件洩漏
  • [#12352] 修復:系統匣標題崩潰
  • [#12327] 修復:不可拖曳區域
  • [#12809] 修復:防止選單在開啟時更新
  • [#13162] 修復:系統匣圖示邊界不允許負值
  • [#13085] 修復:系統匣標題在反白時未反轉
  • [#12196] 修復:當 enable_run_as_node==false 時的 Mac 建置問題
  • [#12157] 修復:具有鮮豔效果的無框架視窗上的其他問題
  • [#13326] 修復:在呼叫 app.removeAsDefaultProtocolClient 後將 Mac 通訊協定設定為 none
  • [#13530] 修復:MAS 建置中不正確使用私有 API
  • [#13517] 修復:tray.setContextMenu 崩潰
  • [#14205] 修復:即使設定了 defaultId,在對話方塊上按下 Esc 鍵現在也會關閉它

Linux

  • [#12507] 修復:非螢幕視窗的 BrowserWindow.focus()

其他注意事項

  • PDF 檢視器目前無法運作,但正在處理中,很快就會再次啟用
  • TextFieldButton API 是實驗性的,因此預設為關閉
    • 可以使用 enable_view_api 建置標記啟用它們

下一步

Electron 團隊將繼續致力於定義我們的流程,以實現更快速和順暢的升級,因為我們希望最終保持與 Chromium、Node 和 V8 開發節奏的一致性。

Electron 2.0.0

·5 分鐘閱讀

經過四個多月的開發、八個 Beta 版本發布,以及來自許多應用程式分階段推出進行的全球測試後,Electron 2.0.0 版本現在可從 electronjs.org 取得。


發布流程

從 2.0.0 開始,Electron 的發布將遵循 語義版本控制。這表示主要版本將更頻繁地跳升,並且通常是 Chromium 的重大更新。修補程式版本應該會更穩定,因為它們只會包含高優先順序的錯誤修正。

Electron 2.0.0 也代表在主要版本發布之前,Electron 如何穩定化的改進。幾個大型 Electron 應用程式已將 2.0.0 Beta 版本納入分階段推出,為 Beta 系列提供了 Electron 有史以來最佳的回饋迴路。

變更 / 新功能

  • 對 Electron 工具鏈的幾個重要部分進行了重大升級,包括 Chrome 61、Node 8.9.3、V8 6.1.534.41、Linux 上的 GTK+ 3、更新的拼字檢查器和 Squirrel。
  • MacOS 上現在支援應用程式內購買#11292
  • 用於載入檔案的新 API。#11565
  • 用於啟用/停用視窗的新 API。#11832
  • 新的 API app.setLocale()。#11469
  • 新增對記錄 IPC 訊息的支援。#11880
  • 新的選單事件。#11754
  • 在 powerMonitor 中新增 shutdown 事件。#11417
  • 新增 affinity 選項,可將數個 BrowserWindow 收集到單一進程中。#11501
  • 新增 saveDialog 列出可用副檔名的功能。#11873
  • 支援其他通知動作 #11647
  • 設定 macOS 通知關閉按鈕標題的功能。#11654
  • 為 menu.popup(window, callback) 新增條件
  • 觸控列項目中的記憶體改進。#12527
  • 改進的安全性建議檢查清單。
  • 新增應用程式範圍安全性範圍書籤。#11711
  • 新增在渲染器進程中設定任意引數的功能。#11850
  • 為格式選擇器新增配件檢視。#11873
  • 修復網路委派競爭條件。#12053
  • 在 Linux 上放棄對 mips64el 架構的支援。Electron 需要 C++14 工具鏈,在發布時該架構無法使用。我們希望將來重新新增支援。

重大 API 變更

  • 移除已棄用的 API,包括
    • 已變更 menu.popup 簽名。#11968
    • 已移除已棄用的 crashReporter.setExtraParameter #11972
    • 已移除已棄用的 webContents.setZoomLevelLimitswebFrame.setZoomLevelLimits#11974
    • 已移除已棄用的 clipboard 方法。#11973
    • 已移除對 tray.setHighlightMode 布林參數的支援。#11981

錯誤修復

  • 已變更以確保 webContents.isOffscreen() 始終可用。#12531
  • 修復當 DevTools 解除停靠並聚焦時的 BrowserWindow.getFocusedWindow()#12554
  • 修復如果預載路徑包含特殊字元,則預載未在沙盒渲染中載入的問題。#12643
  • 根據文件修正 allowRunningInsecureContent 的預設值。#12629
  • 修復 nativeImage 上的透明度。#12683
  • 修復 Menu.buildFromTemplate 的問題。#12703
  • 確認 menu.popup 選項為物件。#12330
  • 移除新進程建立和內容釋放之間的競爭條件。#12361
  • 變更 BrowserView 時更新可拖曳區域。#12370
  • 修復焦點上的選單列切換 Alt 鍵偵測。#12235
  • 修復 webview 中不正確的警告。#12236
  • 修復從父視窗繼承 'show' 選項的問題。#122444
  • 確保 getLastCrashReport() 實際上是最後一個崩潰報告。#12255
  • 修復網路共享路徑上的 require。#12287
  • 修復上下文選單點擊回呼。#12170
  • 修復快顯選單位置。#12181
  • 改進 libuv 迴圈清理。#11465
  • 修復透明顏色的 hexColorDWORDToRGBA#11557
  • 修復使用 getWebPreferences API 的空指標取消引用。#12245
  • 修復選單委派中的循環參考。#11967
  • 修復 net.request 的協定篩選。#11657
  • WebFrame.setVisualZoomLevelLimits 現在設定使用者代理縮放限制 #12510
  • 為 webview 選項設定適當的預設值。#12292
  • 改進的鮮豔效果支援。#12157 #12171 #11886
  • 修復單例固定裝置中的計時問題。
  • 修復 NotifierSupportsActions() 中損壞的生產快取
  • 讓 MenuItem 角色與 camelCase 相容。#11532
  • 改進的觸控列更新。#11812#11761
  • 移除額外的選單分隔符號。#11827
  • 修復藍牙選擇器錯誤。關閉 #11399
  • 修復 macOS 全螢幕切換選單項目標籤。#11633
  • 改進當視窗停用時的工具提示隱藏。#11644
  • 已遷移已棄用的 web-view 方法。#11798
  • 修復從 browserview 開啟的視窗關閉的問題。#11799
  • 修復藍牙選擇器錯誤。#11492
  • 已更新為對 app.getFileIcon API 使用工作排程器。#11595
  • 已變更為即使在螢幕外渲染時也觸發 console-message 事件。#11921
  • 修復使用 WebContents.downloadURL 從自訂協定下載的問題。#11804
  • 修復當 devtools 分離時,透明視窗會失去透明度的問題。#11956
  • 修復 Electron 應用程式取消重新啟動或關機的問題。#11625

macOS

  • 修復重複使用觸控列項目時的事件洩漏。#12624
  • 修復深色模式下的系統匣反白。#12398
  • 修復非同步對話方塊的封鎖主進程問題。#12407
  • 修復 setTitle 系統匣崩潰。#12356
  • 修復設定 dock 選單時崩潰。#12087

Linux

  • 更好的 Linux 桌面通知。#12229 #12216 #11965 #11980
  • 更好的選單 GTK+ 主題支援。#12331
  • 在 Linux 上正常結束應用程式。#12139
  • 使用應用程式名稱作為系統匣圖示的預設工具提示。#12393

Windows

  • 新增 Visual Studio 2017 支援。#11656
  • 修正將例外狀況傳遞給系統當機處理常式的問題。#12259
  • 修正從最小化視窗隱藏工具提示的問題。#11644
  • 修正 desktopCapturer 以捕捉正確的螢幕。#11664
  • 修正 disableHardwareAcceleration 與透明度的問題。#11704

下一步

Electron 團隊正努力支援較新版本的 Chromium、Node 和 v8。敬請期待 3.0.0-beta.1 的推出!

Electron 2.0 及更高版本 - 語義化版本控制

·閱讀時間一分鐘

新版 Electron 主要版本正在開發中,並隨之而來的是我們版本策略的一些變更。從 2.0.0 版本開始,Electron 將嚴格遵守語義版本控制 (Semantic Versioning)。


這項變更意味著您會更頻繁地看到主要版本號的提升,而且通常會是 Chromium 的重大更新。修補程式版本也會更穩定,因為它們現在只會包含錯誤修復,而不會有新功能。

主要版本號遞增

  • Chromium 版本更新
  • Node.js 主要版本更新
  • Electron 破壞性的 API 變更

次要版本號遞增

  • Node.js 次要版本更新
  • Electron 非破壞性的 API 變更

修補程式版本號遞增

  • Node.js 修補程式版本更新
  • 與修復相關的 Chromium 修補程式
  • Electron 錯誤修復

由於 Electron 的語義版本範圍現在將更有意義,我們建議使用 npm 的預設 --save-dev 標誌來安裝 Electron,這會讓您的版本號前面加上 ^,確保您安全地保持在最新的次要版本和修補程式更新。

npm install --save-dev electron

對於只對錯誤修復感興趣的開發人員,您應該使用波浪符號的語義版本前綴,例如 ~2.0.0,這永遠不會引入新功能,只會進行修復以提高穩定性。

如需更多詳細資訊,請參閱electronjs.org/docs/tutorial/electron-versioning

Electron 1.0

·閱讀時間 4 分鐘

在過去的兩年中,Electron 協助開發人員使用 HTML、CSS 和 JavaScript 建立跨平台的桌面應用程式。現在,我們很高興與大家分享我們框架和創建它的社群的一個重要里程碑。Electron 1.0 的版本現在可從 electronjs.org 取得。


Electron 1.0

Electron 1.0 代表 API 穩定性和成熟度的一個重要里程碑。此版本讓您能夠建立在 Windows、Mac 和 Linux 上運作起來真正像原生應用程式的應用程式。透過新的文件、新的工具以及一個引導您了解 Electron API 的新應用程式,建立 Electron 應用程式比以往任何時候都更加容易。

如果您已準備好建立您的第一個 Electron 應用程式,這裡有一個快速入門指南可協助您開始。

我們很高興看到您接下來用 Electron 建立什麼。

Electron 的發展歷程

我們在推出 Atom 時發佈了 Electron,時間大約是兩年多前。當時稱為 Atom Shell 的 Electron 是我們在 Atom 之上建立的框架。在那些日子裡,當我們努力推出 Atom 的初始版本時,Atom 是 Electron 所提供的功能和特性的幕後推手。

現在,推動 Electron 發展的是一個不斷成長的開發人員和公司社群,他們建立的應用程式從 電子郵件聊天Git 應用程式SQL 分析工具BT 客戶端機器人都有。

在這過去的兩年中,我們看到公司和開放原始碼專案都選擇 Electron 作為其應用程式的基礎。僅在去年,Electron 就被下載了超過 120 萬次。看看一些令人驚豔的 Electron 應用程式,如果您的應用程式還沒在那裡,也請將它新增進去。

Electron downloads

Electron API 示範

隨著 1.0 版本的發佈,我們也發佈了一個新應用程式,以協助您探索 Electron API 並了解更多關於如何讓您的 Electron 應用程式感覺像原生應用程式的資訊。 Electron API 示範應用程式包含程式碼片段,可協助您開始開發您的應用程式,並提供有效使用 Electron API 的訣竅。

Electron API Demos

Devtron

我們還新增了一個新擴充功能,以協助您偵錯您的 Electron 應用程式。DevtronChrome 開發人員工具的開放原始碼擴充功能,旨在協助您檢查、偵錯和疑難排解您的 Electron 應用程式。

Devtron

功能

  • 要求圖表,可協助您視覺化您的應用程式在主程序和渲染程序中的內部和外部程式庫相依性
  • IPC 監控器,可追蹤並顯示您的應用程式中進程之間傳送和接收的訊息
  • 事件檢視器,可顯示您應用程式中在核心 Electron API(例如視窗、應用程式和進程)上註冊的事件和監聽器
  • 應用程式 Linter,可檢查您的應用程式是否有常見錯誤和缺少的功能

Spectron

最後,我們將發佈新版本的 Spectron,這是用於 Electron 應用程式的整合測試框架。

Spectron

Spectron 3.0 完整支援整個 Electron API,讓您能夠更快地編寫測試,以驗證您的應用程式在各種情境和環境中的行為。Spectron 基於 ChromeDriverWebDriverIO,因此它還具有用於頁面導覽、使用者輸入和 JavaScript 執行的完整 API。

社群

Electron 1.0 是數百位開發人員社群努力的成果。在核心框架之外,已發佈了數百個程式庫和工具,讓建立、封裝和部署 Electron 應用程式變得更容易。

現在有一個新的社群頁面,其中列出了許多正在開發的令人驚豔的 Electron 工具、應用程式、程式庫和框架。您也可以查看 ElectronElectron Userland 組織,以查看其中一些出色的專案。

剛接觸 Electron 嗎?觀看 Electron 1.0 的介紹影片

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 的要求現在更加簡潔和緊湊

瀏覽器進程需求
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 上的 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');
});

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