跳到主要內容

43 篇標記為「Release」的文章

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

檢視所有標籤

Electron 6.0.0

·4 分鐘閱讀

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


新功能

今天標誌著 Electron 專案的一個首例:這是我們第一次在與對應的 Chrome 穩定版本 同一天發布穩定的 Electron 版本!🎉

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

此版本還包括 Electron API 的改進。版本注意事項中有更完整的清單,但以下是重點

Promise 化

Electron 6.0 延續了 5.0 中開始的現代化 倡議,以改進 Promise 支援。

這些函式現在傳回 Promise,並且仍然支援較舊的基於回呼的調用

  • contentTracing.getCategories() #16583
  • contentTracing.getCategories() #16583
  • contentTracing.getTraceBufferUsage() #16600
  • contents.executeJavaScript() #17312
  • cookies.flushStore() #16464
  • cookies.get() #16464
  • cookies.remove() #16464
  • cookies.set() #16464
  • dialog.showCertificateTrustDialog() #17181
  • inAppPurchase.getProducts() #17355
  • inAppPurchase.purchaseProduct()#17355
  • netLog.stopLogging() #16862
  • session.clearAuthCache() #17259
  • session.clearCache() #17185
  • session.clearHostResolverCache() #17229
  • session.clearStorageData() #17249
  • session.getBlobData() #17303
  • session.getCacheSize() #17185
  • session.resolveProxy() #17222
  • session.setProxy() #17222
  • webContents.hasServiceWorker() #16535
  • webContents.printToPDF() #16795
  • webContents.savePage() #16742
  • webFrame.executeJavaScript() #17312
  • webFrame.executeJavaScriptInIsolatedWorld() #17312
  • webviewTag.executeJavaScript() #17312

這些函式現在有兩種形式:同步和基於 Promise 的非同步

  • dialog.showMessageBox()/dialog.showMessageBoxSync() #17298
  • dialog.showOpenDialog()/dialog.showOpenDialogSync() #16973
  • dialog.showSaveDialog()/dialog.showSaveDialogSync() #17054

這些函式現在傳回 Promise

Electron Helper (Renderer).appElectron Helper (GPU).appElectron Helper (Plugin).app

為了啟用硬化執行階段,這會限制可寫入可執行記憶體和載入由不同團隊 ID 簽署的程式碼等事項,因此需要向 Helper 授予特殊的程式碼簽署授權。

為了使這些授權的範圍限定於需要它們的處理程序類型,Chromium 新增了 Helper 應用程式的三個新變體:一個用於渲染器 (Electron Helper (Renderer).app)、一個用於 GPU 處理程序 (Electron Helper (GPU).app) 和一個用於外掛程式 (Electron Helper (Plugin).app)。

使用 electron-osx-sign 對其 Electron 應用程式進行程式碼簽署的人員不應對其建置邏輯進行任何變更。如果您使用自訂腳本對應用程式進行程式碼簽署,則應確保正確地對三個新的 Helper 應用程式進行程式碼簽署。

為了使用這些新的 Helper 正確封裝您的應用程式,您需要使用 electron-packager@14.0.4 或更高版本。如果您使用 electron-builder,則應追蹤 此問題以追蹤對這些新 Helper 的支援。

重大變更

  • 此版本開始為未來的要求奠定基礎,即在渲染器處理程序中載入的原生 Node 模組必須是 N-APIContext Aware。此變更的原因是更快的效能、更強的安全性以及減少的維護工作量。請在 此問題中閱讀完整詳細資訊,包括建議的時程表。預計此變更將在 Electron v11 中完成。

  • net.IncomingMessage 標頭已稍微變更,以更緊密地符合 Node.js 行為,特別是 set-cookie 的值以及重複標頭的處理方式。#17517

  • shell.showItemInFolder() 現在傳回 void 並且是非同步呼叫。#17121

  • 應用程式現在必須透過呼叫新函式 app.setAppLogPath() 來明確設定記錄路徑,然後才能使用 app.getPath('log')#17841

3.x.y 終止支援

根據我們的支援政策,3.x.y 已達到生命週期終止。鼓勵開發人員和應用程式升級到較新版本的 Electron。

應用程式意見回饋計畫

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

下一步

在短期內,您可以期望團隊繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。儘管我們謹慎地不對發布日期做出承諾,但我們的計畫是每季左右發布包含這些元件新版本的 Electron 主要版本。暫定的 7.0.0 時程表概述了 Electron 7 開發生命週期的關鍵日期。此外,請參閱我們的版本控制文件,以取得有關 Electron 版本控制的更詳細資訊。

有關即將推出的 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,該版本最終完全移除了 v8::Handle,並且仍在使用它的原生 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,它與 V8 分開維護,作為 Node.js 本身的一部分,旨在使原生附加元件免受基礎 JavaScript 引擎變更的影響。您可以在 Node.js 網站上的 N-API 文件中找到更多資訊。

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

如果您在您的應用程式中使用 Node.js 的原生附加元件,並且由於此問題導致原生附加元件無法建置,請與附加元件的作者聯繫,以查看他們是否已發布修復此問題的新版本。如果沒有,聯繫作者(或開啟提取請求!)可能是您的最佳選擇。

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 應用程式的開發人員能夠使用新的 Web 和 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 及更高版本也不再支援 macOS 10.9

單一實例鎖定

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

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

win_delay_load_hook

在為 Windows 建置原生模組時,模組的 binding.gyp 中的 win_delay_load_hook 變數必須為 true(預設值)。如果此 hook 不存在,則原生模組將無法在 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
webviewTagnodeIntegration 的值(如果已設定),否則為 truefalse

請注意:目前存在 已知錯誤 (#9736),如果 contextIsolation 為開啟狀態,則會阻止 webview 標籤運作。請密切關注 GitHub 問題以取得最新資訊!

Electron 安全性文件中深入了解內容隔離、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 版本的意見回饋流程正式化,來更經驗性地定義穩定版本的標準。如果沒有我們的應用程式回饋計畫合作夥伴,v3.0.0 將不可能實現,他們在 Beta 週期中提供了早期測試和意見回饋。感謝 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] 功能:app.isPackaged
  • [#12652] 功能:app.whenReady()
  • [#13183] 功能:process.getHeapStatistics()
  • [#12485] 功能:win.moveTop() 將視窗 Z 順序移至最頂層
  • [#13110] 功能:TextField 和 Button API
  • [#13068] 功能:用於動態記錄控制的 netLog API
  • [#13539] 功能:在沙箱渲染器中啟用 webview
  • [#14118] 功能:fs.readSync 現在可與大型檔案搭配使用
  • [#14031] 功能:Node fs 包裝器,使 fs.realpathSync.nativefs.realpath.native 可用

重大 API 變更

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

macOS

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

Windows

  • [#12879] 功能:新增 DIP 與螢幕座標轉換

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

錯誤修正

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

MacOS

  • [#13220] 修正:允許在 <input file="type"> 開啟檔案對話方塊中選取 bundle 的問題
  • [#12404] 修正:使用非同步對話方塊時封鎖主程序的問題
  • [#12043] 修正:上下文選單點擊回呼
  • [#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
  • 為將多個 BrowserWindow 收集到單一程序中新增 affinity 選項。#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 現在設定 user-agent 縮放比例限制。#12510
  • 為 webview 選項設定適當的預設值。#12292
  • 改進生動效果支援。#12157 #12171 #11886
  • 修正 singleton fixture 中的時序問題。
  • 修正 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 將嚴格遵守語意化版本控制。


這項變更意味著您將更頻繁地看到主要版本號的提升,而且通常會是 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。Electron,當時稱為 Atom Shell,是我們在 Atom 之上建構的框架。在當時,Atom 是推動 Electron 提供功能和特性的動力,因為我們努力推出 Atom 的初始版本。

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

在過去兩年中,我們看到公司和開源專案都選擇 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(例如 window、app 和 processes)上註冊的事件和監聽器
  • 應用程式 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 介紹影片