跳至主要內容

43 篇標記為「Release」的文章

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

檢視所有標籤

Electron 35.0.0

·5 分鐘閱讀

Electron 35.0.0 已發布!它包含 Chromium 134.0.6998.44、V8 13.5 和 Node 22.14.0 的升級。


Electron 團隊很高興宣布 Electron 35.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝,或從我們的發布網站下載。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 BlueskyMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

Service Worker 預先載入腳本以改進擴充功能支援

最初由 RFC #8@samuelmaddock 提出,Electron 35 新增了將預先載入腳本附加到 Service Workers 的能力。隨著 Chrome 的 Manifest V3 擴充功能將大量工作路由到擴充功能 Service Workers,此功能填補了 Electron 對現代 Chrome 擴充功能支援的空白。

在 Session 層級以程式設計方式註冊預先載入腳本時,您現在可以使用 ses.registerPreloadScript(script) API 將其特別應用於 Service Worker 上下文。

主進程
// Add our preload realm script to the session.
session.defaultSession.registerPreloadScript({
// Our script should only run in service worker preload realms.
type: 'service-worker',
// The absolute path to the script.
script: path.join(__dirname, 'extension-sw-preload.js'),
});

此外,IPC 現在可在 Service Worker 與其附加的預先載入腳本之間透過 ServiceWorkerMain.ipc 類別使用。預先載入腳本仍將使用 ipcRenderer 模組與其 Service Worker 通訊。有關更多詳細資訊,請參閱原始 RFC。

此功能之前有許多其他變更為其奠定了基礎

  • #45329 重新設計了 Session 模組的預先載入 API,以支援註冊和取消註冊個別預先載入腳本。
  • #45229 新增了實驗性的 contextBridge.executeInMainWorld(executionScript) 腳本,以在主世界中透過 context bridge 評估 JavaScript。
  • #45341 新增了 ServiceWorkerMain 類別,以與主進程中的 Service Worker 互動。

堆疊變更

Electron 35 將 Chromium 從 132.0.6834.83 升級到 134.0.6998.44,Node 從 20.18.1 升級到 22.14.0,以及 V8 從 13.2 升級到 13.5

新功能

  • Info.plist 中新增 NSPrefersDisplaySafeAreaCompatibilityMode = false,以從應用程式選項中移除「縮放以適合內建相機下方」。#45357 (也包含在 v34.1.0 中)
  • 新增 ServiceWorkerMain 類別,以與主進程中的 service worker 互動。#45341
    • ServiceWorkers 上新增 running-status-changed 事件,以指示 service worker 的執行狀態何時變更。
    • ServiceWorkers 上新增 startWorkerForScope,以啟動可能先前已停止的 worker。
  • 新增實驗性的 contextBridge.executeInMainWorld,以安全地跨世界邊界執行程式碼。#45330
  • frame 新增至 'console-message' 事件。#43617
  • 在 Windows 上新增 query-session-end 事件並改進 session-end 事件。#44598
  • 新增 view.getVisible()#45409
  • 新增 webContents.navigationHistory.restore(index, entries) API,允許還原導航歷史記錄。#45583
  • 將可選的動畫參數新增至 BrowserWindow.setVibrancy#35987
  • 新增 document.executeCommand("paste") 的權限支援。#45471 (也包含在 v34.1.0 中)
  • 在 Windows 上新增對 roundedCorners BrowserWindow 建構函式選項的支援。#45740 (也包含在 v34.3.0 中)
  • 新增對 service worker 預先載入腳本的支援。#45408
  • 支援 Portal 的 globalShortcuts。Electron 必須使用 --enable-features=GlobalShortcutsPortal 執行,才能使此功能正常運作。#45297

重大變更

已移除:PrinterInfo 上的 isDefaultstatus 屬性

這些屬性已從 PrinterInfo 物件中移除,因為它們已從上游 Chromium 中移除。

已棄用:session.serviceWorkers 上的 getFromVersionID

session.serviceWorkers.fromVersionID(versionId) API 已被棄用,改用 session.serviceWorkers.getInfoFromVersionID(versionId)。此變更旨在更清楚地表明傳回哪個物件,並引入了 session.serviceWorkers.getWorkerFromVersionID(versionId) API。

// Deprecated
session.serviceWorkers.fromVersionID(versionId);

// Replace with
session.serviceWorkers.getInfoFromVersionID(versionId);

已棄用:Session 上的 setPreloadsgetPreloads

引入了 registerPreloadScriptunregisterPreloadScriptgetPreloadScripts 作為已棄用方法的替代方案。這些新 API 允許第三方程式庫註冊預先載入腳本,而無需替換現有腳本。此外,新的 type 選項允許超出 frame 的其他預先載入目標。

// Deprecated
session.setPreloads([path.join(__dirname, 'preload.js')]);

// Replace with:
session.registerPreloadScript({
type: 'frame',
id: 'app-preload',
filePath: path.join(__dirname, 'preload.js'),
});

已棄用:WebContentsconsole-message 事件中的 levelmessagelinesourceId 引數

WebContents 上的 console-message 事件已更新,以提供有關 Event 引數的詳細資訊。

// Deprecated
webContents.on(
'console-message',
(event, level, message, line, sourceId) => {},
);

// Replace with:
webContents.on(
'console-message',
({ level, message, lineNumber, sourceId, frame }) => {},
);

此外,level 現在是一個字串,可能的值為 infowarningerrordebug

行為已變更:WebRequestFilterurls 屬性。

先前,空的 urls 陣列被解釋為包含所有 URL。為了明確包含所有 URL,開發人員現在應使用 <all_urls> 模式,這是一個指定的 URL 模式,它符合每個可能的 URL。此變更澄清了意圖,並確保更可預測的行為。

// Deprecated
const deprecatedFilter = {
urls: [],
};

// Replace with
const newFilter = {
urls: ['<all_urls>'],
};

已棄用:systemPreferences.isAeroGlassEnabled()

systemPreferences.isAeroGlassEnabled() 函數已被棄用,沒有替代方案。自 Electron 23 以來,它一直傳回 true,Electron 23 僅支援 Windows 10+,在 Windows 10+ 中,DWM 合成無法再停用。

https://learn.microsoft.com/en-us/windows/win32/dwm/composition-ovw#disabling-dwm-composition-windows7-and-earlier

終止對 32.x.y 的支援

根據專案的支援政策,Electron 32.x.y 已達到終止支援。鼓勵開發人員和應用程式升級到較新版本的 Electron。

E35 (25 年 3 月)E36 (25 年 4 月)E37 (25 年 6 月)
35.x.y36.x.y37.x.y
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 34.0.0

·4 分鐘閱讀

Electron 34.0.0 已發布!它包含 Chromium 132.0.6834.83、V8 13.2 和 Node 20.18.1 的升級。


Electron 團隊很高興宣布 Electron 34.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝,或從我們的發布網站下載。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 BlueskyMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

HTTP 壓縮共享字典管理 API

HTTP 壓縮允許網頁伺服器在瀏覽器接收資料之前壓縮資料。現代版本的 Chromium 支援 Brotli 和 Zstandard,這些是比 gzip 等較舊方案效能更好的較新壓縮演算法。

自訂共享字典進一步提高了 Brotli 和 Zstandard 壓縮的效率。有關更多資訊,請參閱Chrome for Developers 部落格上的共享字典

@felixrieseberg#44950 中新增了以下 API,以在 Session 層級管理共享字典

  • session.getSharedDictionaryUsageInfo()
  • session.getSharedDictionaryInfo(options)
  • session.clearSharedDictionaryCache()
  • session.clearSharedDictionaryCacheForIsolationKey(options)

無回應的渲染器 JavaScript 呼叫堆疊

當渲染器進程掛起過長一段時間時,就會發生 Electron 的 unresponsive 事件。@samuelmaddock#44204 中新增的全新 WebFrameMain.collectJavaScriptCallStack() API 允許您從關聯的 WebFrameMain 物件 (webContnets.mainFrame) 收集 JavaScript 呼叫堆疊。

在長時間執行的 JavaScript 事件導致進程掛起的情況下,此 API 可用於確定框架無回應的原因。有關更多資訊,請參閱建議的網頁標準 Crash Reporting API

主進程
const { app } = require('electron');

app.commandLine.appendSwitch(
'enable-features',
'DocumentPolicyIncludeJSCallStacksInCrashReports',
);

app.on('web-contents-created', (_, webContents) => {
webContents.on('unresponsive', async () => {
// Interrupt execution and collect call stack from unresponsive renderer
const callStack = await webContents.mainFrame.collectJavaScriptCallStack();
console.log('Renderer unresponsive\n', callStack);
});
});
警告

此 API 需要啟用 'Document-Policy': 'include-js-call-stacks-in-crash-reports' 標頭。有關更多詳細資訊,請參閱 #45356

堆疊變更

Electron 34 將 Chromium 從 130.0.6723.44 升級到 132.0.6834.83,Node 從 20.18.0 升級到 20.18.1,以及 V8 從 13.0 升級到 13.2

新功能

  • 新增 API 以管理共享字典,以提高使用 Brotli 或 ZStandard 壓縮的效率。新的 API 為 session.getSharedDictionaryUsageInfo()session.getSharedDictionaryInfo(options)session.clearSharedDictionaryCache()session.clearSharedDictionaryCacheForIsolationKey(options)#44950
  • 新增 WebFrameMain.collectJavaScriptCallStack(),用於存取無回應渲染器的 JavaScript 呼叫堆疊。#44938
  • 為處於卸載狀態的框架新增 WebFrameMain.detached
    • 新增 WebFrameMain.isDestroyed() 以確定框架是否已損毀。
    • 修正 webFrameMain.fromId(processId, frameId) 在框架卸載時傳回與給定參數不符的 WebFrameMain 執行個體。#43473
  • 在公用程式進程中新增錯誤事件,以支援 V8 嚴重錯誤的診斷報告。#43774
  • 功能:GPU 加速共享紋理離螢幕渲染。#42953

重大變更

行為已變更:在 Windows 上全螢幕期間將隱藏選單列

這使行為與 Linux 相同。先前行為:在 Windows 上全螢幕期間,選單列仍然可見。新行為:在 Windows 上全螢幕期間,選單列將被隱藏。

更正:這先前在 Electron 33 中被列為重大變更,但首次發布於 Electron 34。

終止對 31.x.y 的支援

根據專案的支援政策,Electron 31.x.y 已達到終止支援。鼓勵開發人員和應用程式升級到較新版本的 Electron。

E34 (25 年 1 月)E35 (25 年 4 月)E36 (25 年 6 月)
34.x.y35.x.y36.x.y
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 33.0.0

·4 分鐘閱讀

Electron 33.0.0 已發布!它包含 Chromium 130.0.6723.44、V8 13.0 和 Node 20.18.0 的升級。


Electron 團隊很高興宣布 Electron 33.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝,或從我們的發布網站下載。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

重點

  • 新增處理常式 app.setClientCertRequestPasswordHandler(handler),以協助在需要 PIN 碼時解鎖加密裝置。#41205
  • 使用 2 個新功能擴充 navigationHistory API,以實現更好的歷史記錄管理。#42014
  • 改進原生主題透明度檢查。#42862

堆疊變更

Electron 33 將 Chromium 從 128.0.6613.36 升級到 130.0.6723.44,Node 從 20.16.0 升級到 20.18.0,以及 V8 從 12.8 升級到 13.0

新功能

  • 新增處理常式 app.setClientCertRequestPasswordHandler(handler),以協助在需要 PIN 碼時解鎖加密裝置。#41205
  • 在公用程式進程中新增錯誤事件,以支援 V8 嚴重錯誤的診斷報告。#43997
  • 新增 View.setBorderRadius(radius),用於自訂檢視的邊框半徑,並與 WebContentsView 相容。#42320
  • 使用 2 個新功能擴充 navigationHistory API,以實現更好的歷史記錄管理。#42014

重大變更

已移除:macOS 10.15 支援

macOS 10.15 (Catalina) 已不再受 Chromium 支援。

舊版本的 Electron 將繼續在 Catalina 上執行,但 macOS 11 (Big Sur) 或更高版本將需要執行 Electron v33.0.0 及更高版本。

行為已變更:原生模組現在需要 C++20

由於上游進行的變更,V8Node.js 現在都需要 C++20 作為最低版本。使用原生 node 模組的開發人員應使用 --std=c++20 而非 --std=c++17 建置其模組。使用 gcc9 或更低版本的映像可能需要更新到 gcc10 才能編譯。有關更多詳細資訊,請參閱 #43555

行為已變更:Windows 上的自訂協定 URL 處理

由於 Chromium 中進行的變更以支援非特殊方案 URL,因此使用 Windows 檔案路徑的自訂協定 URL 將不再與已棄用的 protocol.registerFileProtocol 以及 BrowserWindow.loadURLWebContents.loadURL<webview>.loadURL 上的 baseURLForDataURL 屬性正確運作。protocol.handle 也將無法與這些類型的 URL 搭配使用,但這不是變更,因為它一直以來都是這樣運作。

// No longer works
protocol.registerFileProtocol('other', () => {
callback({ filePath: '/path/to/my/file' });
});

const mainWindow = new BrowserWindow();
mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://C:\\myapp' },
);
mainWindow.loadURL('other://C:\\myapp\\index.html');

// Replace with
const path = require('node:path');
const nodeUrl = require('node:url');
protocol.handle(other, (req) => {
const srcPath = 'C:\\myapp\\';
const reqURL = new URL(req.url);
return net.fetch(
nodeUrl.pathToFileURL(path.join(srcPath, reqURL.pathname)).toString(),
);
});

mainWindow.loadURL(
'data:text/html,<script src="loaded-from-dataurl.js"></script>',
{ baseURLForDataURL: 'other://' },
);
mainWindow.loadURL('other://index.html');

行為已變更:apploginwebContents 屬性

當從使用 respondToAuthRequestsFromMainProcess 選項建立的公用程式進程請求觸發事件時,來自 applogin 事件中的 webContents 屬性將為 null

已棄用:BrowserWindowConstructorOption.type 中的 textured 選項

BrowserWindowConstructorOptionstypetextured 選項已被棄用,沒有替代方案。此選項依賴於 macOS 上的 NSWindowStyleMaskTexturedBackground 樣式遮罩,該樣式遮罩已被棄用,沒有替代方案。

已棄用:systemPreferences.accessibilityDisplayShouldReduceTransparency

systemPreferences.accessibilityDisplayShouldReduceTransparency 屬性現在已被棄用,改用新的 nativeTheme.prefersReducedTransparency,後者提供相同的資訊,並且跨平台運作。

// Deprecated
const shouldReduceTransparency =
systemPreferences.accessibilityDisplayShouldReduceTransparency;

// Replace with:
const prefersReducedTransparency = nativeTheme.prefersReducedTransparency;

終止對 30.x.y 的支援

根據專案的支援政策,Electron 30.x.y 已達到終止支援。鼓勵開發人員和應用程式升級到較新版本的 Electron。

E33 (24 年 10 月)E34 (25 年 1 月)E35 (25 年 4 月)
33.x.y34.x.y35.x.y
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 32.0.0

·4 分鐘閱讀

Electron 32.0.0 已發布!它包含 Chromium 128.0.6613.36、V8 12.8 和 Node 20.16.0 的升級。


Electron 團隊很高興宣布 Electron 32.0.0 的發布!您可以透過 npm 使用 npm install electron@latest 安裝,或從我們的發布網站下載。繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

重點

  • 在我們的文件中新增了新的 API 版本歷史記錄,這是 @piotrpdev 作為 Google Summer of Code 的一部分建立的功能。您可以在 這篇部落格文章 中了解更多資訊。#42982
  • 從 Web File API 中移除非標準的 File.path 擴充功能。#42053
  • 在嘗試在封鎖路徑中開啟檔案或目錄時,使 Web File System API 中的失敗路徑與上游對齊。#42993
  • 將以下現有的導航相關 API 新增至 webcontents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear。先前的導航 API 現在已棄用。#41752

堆疊變更

Electron 32 將 Chromium 從 126.0.6478.36 升級到 128.0.6613.36,Node 從 20.14.0 升級到 20.16.0,以及 V8 從 12.6 升級到 12.8

新功能

  • 新增支援回應從工具程式透過 app 模組的 'login' 事件啟動的身份驗證請求。#43317
  • CPUUsage 結構中新增了 cumulativeCPUUsage 屬性,該屬性會傳回自程序啟動以來使用的 CPU 時間總秒數。#41819
  • 將以下現有的導航相關 API 新增至 webContents.navigationHistorycanGoBackgoBackcanGoForwardgoForwardcanGoToOffsetgoToOffsetclear#41752
  • 擴展 WebContentsView 以接受預先存在的 webContents 物件。#42086
  • nativeTheme 中新增了一個新的屬性 prefersReducedTransparency,表示使用者是否已透過系統輔助功能設定選擇減少作業系統層級的透明度。#43137
  • 當嘗試在封鎖路徑中開啟檔案或目錄時,使檔案系統存取 API 中的失敗路徑與上游對齊。#42993
  • 在 Linux 上啟用 Windows 控制項覆蓋 API。#42681
  • 在網路請求中啟用 zstd 壓縮。#43300

重大變更

已移除:File.path

Web File 物件的非標準 path 屬性是在 Electron 的早期版本中新增的,作為在渲染器中執行所有操作時,使用原生檔案的便利方法。然而,它代表著與標準的偏差,並且也構成輕微的安全風險,因此從 Electron 32.0 開始,它已被移除,改用 webUtils.getPathForFile 方法。

// Before (renderer)
const file = document.querySelector('input[type=file]');
alert(`Uploaded file path was: ${file.path}`);
// After (renderer)
const file = document.querySelector('input[type=file]');
electron.showFilePath(file);

// After (preload)
const { contextBridge, webUtils } = require('electron');

contextBridge.exposeInMainWorld('electron', {
showFilePath(file) {
// It's best not to expose the full file path to the web content if
// possible.
const path = webUtils.getPathForFile(file);
alert(`Uploaded file path was: ${path}`);
},
});

已棄用:WebContents 上的 clearHistorycanGoBackgoBackcanGoForwardgoForwardgoToIndexcanGoToOffsetgoToOffset

WebContents 實例上的導航相關 API 現在已被棄用。這些 API 已移至 WebContentsnavigationHistory 屬性,以便為管理導航歷史記錄提供更結構化且直觀的介面。

// Deprecated
win.webContents.clearHistory();
win.webContents.canGoBack();
win.webContents.goBack();
win.webContents.canGoForward();
win.webContents.goForward();
win.webContents.goToIndex(index);
win.webContents.canGoToOffset();
win.webContents.goToOffset(index);

// Replace with
win.webContents.navigationHistory.clear();
win.webContents.navigationHistory.canGoBack();
win.webContents.navigationHistory.goBack();
win.webContents.navigationHistory.canGoForward();
win.webContents.navigationHistory.goForward();
win.webContents.navigationHistory.canGoToOffset();
win.webContents.navigationHistory.goToOffset(index);

行為已變更:userData 中的目錄 databases 將被刪除

如果您在 app.getPath('userData') 傳回的目錄中有名為 databases 的目錄,則在首次執行 Electron 32 時將會刪除它。databases 目錄由 WebSQL 使用,WebSQL 已在 Electron 31 中移除。Chromium 現在執行清理以刪除此目錄。請參閱 issue #45396

29.x.y 版本終止支援

根據專案的支援政策,Electron 29.x.y 版本已終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E32(24 年 8 月)E33 (24 年 10 月)E34 (25 年 1 月)
32.x.y33.x.y34.x.y
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 31.0.0

·3 分鐘閱讀時間

Electron 31.0.0 已發佈!它包含 Chromium 126.0.6478.36、V8 12.6 和 Node 20.14.0 的升級。


Electron 團隊很高興宣佈 Electron 31.0.0 的發佈!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發佈網站下載它。繼續閱讀以瞭解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

重點

  • 擴展 WebContentsView 以接受預先存在的 webContents 物件。#42319
  • 新增 NODE_EXTRA_CA_CERTS 的支援。#41689
  • 更新 window.flashFrame(bool) 以在 macOS 上持續閃爍。#41391
  • 移除 WebSQL 支援 #41868
  • nativeImage.toDataURL 將保留 PNG 色彩空間 #41610
  • 擴展 webContents.setWindowOpenHandler 以支援手動建立 BrowserWindow。#41432

堆疊變更

Electron 31 將 Chromium 從 124.0.6367.49 升級到 126.0.6478.36,Node 從 20.11.1 升級到 20.14.0,V8 從 12.4 升級到 12.6

新功能

  • clearData 方法新增至 Session#40983
    • 將選項參數新增至 Session.clearData API。#41355
  • 新增支援透過服務類別 ID 在 navigator.serial 中請求藍牙埠。#41638
  • 新增支援 Node 的 NODE_EXTRA_CA_CERTS 環境變數。#41689
  • 擴展 webContents.setWindowOpenHandler 以支援手動建立 BrowserWindow。#41432
  • 實作對 Web 標準 File System API 的支援。#41419
  • 擴展 WebContentsView 以接受預先存在的 WebContents 實例。#42319
  • 在 webContents API 上新增了一個新的實例屬性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,使應用程式能夠檢索瀏覽歷史記錄中任何導航條目的 URL 和標題。#41577 (也在 2930 中)

重大變更

已移除:WebSQL 支援

Chromium 已移除對上游 WebSQL 的支援,將其轉移到僅限 Android。有關更多資訊,請參閱 Chromium 的移除意圖討論

行為已變更:nativeImage.toDataURL 將保留 PNG 色彩空間

PNG 解碼器實作已變更為保留色彩空間資料。從此函式傳回的編碼資料現在與其匹配。

有關更多資訊,請參閱 crbug.com/332584706

行為已變更:win.flashFrame(bool) 將在 macOS 上持續閃爍 Dock 圖示

這使行為與 Windows 和 Linux 達到同等水平。先前行為:第一個 flashFrame(true) 僅彈跳 Dock 圖示一次(使用 NSInformationalRequest 層級),而 flashFrame(false) 則不執行任何操作。新行為:持續閃爍直到呼叫 flashFrame(false)。這改用 NSCriticalRequest 層級。若要明確使用 NSInformationalRequest 以導致單次 Dock 圖示彈跳,仍然可以使用 dock.bounce('informational')

28.x.y 版本終止支援

根據專案的支援政策,Electron 28.x.y 版本已終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E31(24 年 6 月)E32(24 年 8 月)E33 (24 年 10 月)
31.x.y32.x.y33.x.y
30.x.y31.x.y32.x.y
28.x.y29.x.y31.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 30.0.0

·4 分鐘閱讀

Electron 30.0.0 已發佈!它包含 Chromium 124.0.6367.49、V8 12.4 和 Node.js 20.11.1 的升級。


Electron 團隊很高興宣佈 Electron 30.0.0 的發佈!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發佈網站下載它。繼續閱讀以瞭解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

重點

  • Windows 上現在支援 ASAR 完整性熔斷器 (#40504)
    • 如果未正確設定,已啟用 ASAR 完整性的現有應用程式可能無法在 Windows 上運作。使用 Electron 封裝工具的應用程式應升級到 @electron/packager@18.3.1@electron/forge@7.4.0
    • 請查看我們的 ASAR 完整性教學 以取得更多資訊。
  • 新增 WebContentsViewBaseWindow 主進程模組,棄用並取代 BrowserView (#35658)。在這篇部落格文章中瞭解更多關於如何從 BrowserView 遷移到 WebContentsView 的資訊。
    • BrowserView 現在是 WebContentsView 的墊片,並且舊的實作已被移除。
    • 請參閱 我們的 Web 嵌入文件,以比較新的 WebContentsView API 與其他類似 API。
  • 實作對 File System API 的支援 (#41827)

堆疊變更

Electron 30 將 Chromium 從 122.0.6261.39 升級到 124.0.6367.49,Node 從 20.9.0 升級到 20.11.1,V8 從 12.2 升級到 12.4

新功能

  • transparent webpreference 新增至 webviews。( #40301)
  • 在 webContents API 上新增了一個新的實例屬性 navigationHistory,其中包含 navigationHistory.getEntryAtIndex 方法,使應用程式能夠檢索瀏覽歷史記錄中任何導航條目的 URL 和標題。( #41662)
  • 新增新的 BrowserWindow.isOccluded() 方法,以允許應用程式檢查遮蔽狀態。( #38982)
  • 為從工具程式使用 net 模組發出的請求新增 Proxy 設定支援。( #41417)
  • 新增支援透過服務類別 ID 在 navigator.serial 中請求藍牙埠。( #41734)
  • 新增支援 Node.js NODE_EXTRA_CA_CERTS CLI 旗標。( #41822)

重大變更

行為已變更:跨來源 iframe 現在使用權限政策來存取功能

跨來源 iframe 現在必須透過 allow 屬性指定給定 iframe 可用的功能,才能存取這些功能。

有關更多資訊,請參閱 文件

已移除:--disable-color-correct-rendering 命令列開關

此開關從未正式記錄在案,但此處仍記錄其移除。Chromium 本身現在對色彩空間有更好的支援,因此不應需要此旗標。

行為已變更:macOS 上的 BrowserView.setAutoResize 行為

在 Electron 30 中,BrowserView 現在是新 WebContentsView API 的包裝器。

先前,BrowserView API 的 setAutoResize 函式由 macOS 上的 自動調整大小 以及 Windows 和 Linux 上的自訂演算法支援。對於簡單的用例,例如使 BrowserView 填滿整個視窗,這兩種方法的行為是相同的。但是,在更進階的案例中,BrowserView 在 macOS 上的自動調整大小方式與在其他平台上的方式不同,因為 Windows 和 Linux 的自訂調整大小演算法與 macOS 的自動調整大小 API 的行為並不完全匹配。自動調整大小行為現在在所有平台上都已標準化。

如果您的應用程式使用 BrowserView.setAutoResize 執行比使 BrowserView 填滿整個視窗更複雜的操作,則您可能已經有自訂邏輯來處理 macOS 上行為的這種差異。如果是這樣,則在 Electron 30 中不再需要該邏輯,因為自動調整大小行為是一致的。

已移除:WebContentscontext-menuparams.inputFormType 屬性

已移除 WebContentscontext-menu 事件中 params 物件的 inputFormType 屬性。請改用新的 formControlType 屬性。

已移除:process.getIOCounters()

Chromium 已移除對此資訊的存取權。

27.x.y 版本終止支援

根據專案的支援政策,Electron 27.x.y 版本已終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E30(24 年 4 月)E31(24 年 6 月)E32(24 年 8 月)
30.x.y31.x.y32.x.y
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 29.0.0

·4 分鐘閱讀

Electron 29.0.0 已發佈!它包含 Chromium 122.0.6261.39、V8 12.2 和 Node.js 20.9.0 的升級。


Electron 團隊很高興宣佈 Electron 29.0.0 的發佈!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發佈網站下載它。繼續閱讀以瞭解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

重點

  • 新增了一個新的頂層 webUtils 模組,這是一個渲染器進程模組,提供一個實用程式層來與 Web API 物件互動。模組中第一個可用的 API 是 webUtils.getPathForFile。Electron 先前的 File.path 擴充是對 Web 標準的偏差;這個新的 API 更符合目前的 Web 標準行為。

堆疊變更

Electron 29 將 Chromium 從 120.0.6099.56 升級到 122.0.6261.39,Node 從 18.18.2 升級到 20.9.0,V8 從 12.0 升級到 12.2

新功能

  • 新增新的 webUtils 模組,這是一個實用程式層,用於與 Web API 物件互動,以取代 File.path 擴充。#38776
  • net 模組新增至 工具程式進程#40890
  • 新增一個新的 Electron 熔斷器grantFileProtocolExtraPrivileges,它使 file:// 協議選擇更安全和更具限制性的行為,以符合 Chromium。#40372
  • protocol.registerSchemesAsPrivileged 中新增一個選項,以允許自訂方案中的 V8 程式碼快取。#40544
  • 遷移 app.{set|get}LoginItemSettings(settings) 以在 macOS 13.0+ 上使用 Apple 的新推薦底層框架。#37244

重大變更

行為已變更:ipcRenderer 無法再透過 contextBridge 傳送

嘗試透過 contextBridge 將整個 ipcRenderer 模組作為物件傳送現在將導致橋接器接收端上的空物件。進行此變更是為了移除/減輕安全隱患。您不應透過橋接器直接公開 ipcRenderer 或其方法。相反,請提供如下的安全包裝器

contextBridge.exposeInMainWorld('app', {
onEvent: (cb) => ipcRenderer.on('foo', (e, ...args) => cb(args)),
});

已移除:app 上的 renderer-process-crashed 事件

已移除 app 上的 renderer-process-crashed 事件。請改用新的 render-process-gone 事件。

// Removed
app.on('renderer-process-crashed', (event, webContents, killed) => {
/* ... */
});

// Replace with
app.on('render-process-gone', (event, webContents, details) => {
/* ... */
});

已移除:WebContents<webview> 上的 crashed 事件

已移除 WebContents<webview> 上的 crashed 事件。請改用新的 render-process-gone 事件。

// Removed
win.webContents.on('crashed', (event, killed) => {
/* ... */
});
webview.addEventListener('crashed', (event) => {
/* ... */
});

// Replace with
win.webContents.on('render-process-gone', (event, details) => {
/* ... */
});
webview.addEventListener('render-process-gone', (event) => {
/* ... */
});

已移除:app 上的 gpu-process-crashed 事件

已移除 app 上的 gpu-process-crashed 事件。請改用新的 child-process-gone 事件。

// Removed
app.on('gpu-process-crashed', (event, killed) => {
/* ... */
});

// Replace with
app.on('child-process-gone', (event, details) => {
/* ... */
});

26.x.y 版本終止支援

根據專案的支援政策,Electron 26.x.y 版本已終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E29(24 年 2 月)E30(24 年 4 月)E31(24 年 6 月)
29.x.y30.x.y31.x.y
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y

下一步

您是否知道 Electron 最近新增了社群徵求意見 (RFC) 程序?如果您想在框架中新增功能,RFC 可以成為與維護人員就其設計展開對話的有用工具。您也可以在 Pull Requests 中查看即將發生的變更。若要瞭解更多資訊,請查看我們的Introducing electron/rfcs 部落格文章,或直接查看 electron/rfcs 儲存庫的 README。

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 28.0.0

·3 分鐘閱讀時間

Electron 28.0.0 已發佈!它包含 Chromium 120.0.6099.56、V8 12.0 和 Node.js 18.18.2 的升級。


Electron 團隊很高興宣佈 Electron 28.0.0 的發佈!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發佈網站下載它。繼續閱讀以瞭解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

重點

  • 實作對 ECMAScript 模組或 ESM 的支援(什麼是 ECMAScript 模組?在此處瞭解更多資訊。這包括對 Electron 本身以及諸如 UtilityProcess API 入口點等區域的 ESM 支援。請參閱我們的 ESM 文件以取得更多詳細資訊。
  • 除了在 Electron 本身中啟用 ESM 支援之外,Electron Forge 也支援使用 ESM 來封裝、建置和開發 Electron 應用程式。您可以在 Forge v7.0.0 或更高版本中找到此支援。

堆疊變更

新功能

  • 啟用 ESM 支援。#37535
    • 有關更多詳細資訊,請參閱 ESM 文件
  • 將 ESM 入口點新增至 UtilityProcess API。#40047
  • 將多個屬性新增至 display 物件,包括 detectedmaximumCursorSizenativeOrigin#40554
  • 在 Linux 上新增對 ELECTRON_OZONE_PLATFORM_HINT 環境變數的支援。#39792

重大變更

行為已變更:設定為 false 的 WebContents.backgroundThrottling 會影響主機 BrowserWindow 中的所有 WebContents

設定為 false 的 WebContents.backgroundThrottling 將停用 BrowserWindow 中所有由其顯示的 WebContents 的影格節流。

已移除:BrowserWindow.setTrafficLightPosition(position)

BrowserWindow.setTrafficLightPosition(position) 已移除,應改用 BrowserWindow.setWindowButtonPosition(position) API,該 API 接受 null 而不是 { x: 0, y: 0 },以將位置重設為系統預設值。

// Removed in Electron 28
win.setTrafficLightPosition({ x: 10, y: 10 });
win.setTrafficLightPosition({ x: 0, y: 0 });

// Replace with
win.setWindowButtonPosition({ x: 10, y: 10 });
win.setWindowButtonPosition(null);

已移除:BrowserWindow.getTrafficLightPosition()

BrowserWindow.getTrafficLightPosition() 已移除,應改用 BrowserWindow.getWindowButtonPosition() API,當沒有自訂位置時,該 API 會傳回 null 而不是 { x: 0, y: 0 }

// Removed in Electron 28
const pos = win.getTrafficLightPosition();
if (pos.x === 0 && pos.y === 0) {
// No custom position.
}

// Replace with
const ret = win.getWindowButtonPosition();
if (ret === null) {
// No custom position.
}

已移除:ipcRenderer.sendTo()

已移除 ipcRenderer.sendTo() API。應透過在渲染器之間設定 MessageChannel 來取代它。

IpcRendererEventsenderIdsenderIsMainFrame 屬性也已移除。

已移除:app.runningUnderRosettaTranslation

已移除 app.runningUnderRosettaTranslation 屬性。請改用 app.runningUnderARM64Translation

// Removed
console.log(app.runningUnderRosettaTranslation);
// Replace with
console.log(app.runningUnderARM64Translation);

25.x.y 版本終止支援

根據專案的支援政策,Electron 25.x.y 版本已終止支援。建議開發人員和應用程式升級到較新版本的 Electron。

E28(23 年 12 月)E29(24 年 2 月)E30(24 年 4 月)
28.x.y29.x.y30.x.y
27.x.y28.x.y29.x.y
26.x.y27.x.y28.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 27.0.0

·3 分鐘閱讀時間

Electron 27.0.0 已發佈!它包含 Chromium 118.0.5993.32、V8 11.8 和 Node.js 18.17.1 的升級。


Electron 團隊很高興宣佈 Electron 27.0.0 的發佈!您可以透過 npm 使用 npm install electron@latest 安裝它,或從我們的發佈網站下載它。繼續閱讀以瞭解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 TwitterMastodon 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 問題追蹤器中回報。

值得注意的變更

堆疊變更

重大變更

已移除:macOS 10.13 / 10.14 支援

macOS 10.13 (High Sierra) 和 macOS 10.14 (Mojave) 不再受 Chromium 支援。

舊版 Electron 將繼續在這些作業系統上執行,但需要 macOS 10.15 (Catalina) 或更高版本才能執行 Electron v27.0.0 及更高版本。

已棄用:ipcRenderer.sendTo()

ipcRenderer.sendTo() API 已被棄用。應透過在渲染器之間設定 MessageChannel 來取代它。

IpcRendererEventsenderIdsenderIsMainFrame 屬性也已棄用。

已移除:systemPreferences 中的色彩配置事件

已移除以下 systemPreferences 事件

  • inverted-color-scheme-changed
  • high-contrast-color-scheme-changed

請改用 nativeTheme 模組上的新 updated 事件。

// Removed
systemPreferences.on('inverted-color-scheme-changed', () => {
/* ... */
});
systemPreferences.on('high-contrast-color-scheme-changed', () => {
/* ... */
});

// Replace with
nativeTheme.on('updated', () => {
/* ... */
});

已移除:webContents.getPrinters

已移除 webContents.getPrinters 方法。請改用 webContents.getPrintersAsync

const w = new BrowserWindow({ show: false });

// Removed
console.log(w.webContents.getPrinters());
// Replace with
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers);
});

已移除:systemPreferences.{get,set}AppLevelAppearancesystemPreferences.appLevelAppearance

已移除 systemPreferences.getAppLevelAppearancesystemPreferences.setAppLevelAppearance 方法,以及 systemPreferences.appLevelAppearance 屬性。請改用 nativeTheme 模組。

// Removed
systemPreferences.getAppLevelAppearance();
// Replace with
nativeTheme.shouldUseDarkColors;

// Removed
systemPreferences.appLevelAppearance;
// Replace with
nativeTheme.shouldUseDarkColors;

// Removed
systemPreferences.setAppLevelAppearance('dark');
// Replace with
nativeTheme.themeSource = 'dark';

已移除:systemPreferences.getColoralternate-selected-control-text

已移除 systemPreferences.getColoralternate-selected-control-text 值。請改用 selected-content-background

// Removed
systemPreferences.getColor('alternate-selected-control-text');
// Replace with
systemPreferences.getColor('selected-content-background');

新功能

  • 新增應用程式輔助功能透明度設定 API #39631
  • 新增對 chrome.scripting 擴充功能 API 的支援 #39675
  • 預設啟用 WaylandWindowDecorations #39644

24.x.y 版本終止支援

Electron 24.x.y 已依照專案的 支援政策 終止支援。建議開發者和應用程式升級至較新版本的 Electron。

E27 (2023年10月)E28(23 年 12 月)E29(24 年 2 月)
27.x.y28.x.y29.x.y
26.x.y27.x.y28.x.y
25.x.y26.x.y27.x.y

22.x.y 版本延長支援終止

今年稍早,Electron 團隊為了配合 Chrome 對 Windows 7/8/8.1 的延長支援,將 Electron 22 原定的終止生命週期日期從 2023 年 5 月 30 日延長至 2023 年 10 月 10 日 (詳情請參閱 告別 Windows 7/8/8.1)。

Electron 22.x.y 已依照專案的 支援政策 以及此延長支援措施終止支援。這將把支援版本回溯至最新的三個穩定主要版本,並終止對 Windows 7/8/8.1 的官方支援。

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。

Electron 26.0.0

·2 分鐘閱讀

Electron 26.0.0 已發布!它包含了 Chromium 116.0.5845.62、V8 11.2 和 Node.js 18.16.1 的升級。請閱讀以下內容以了解更多詳情!


Electron 團隊很高興宣布 Electron 26.0.0 的發布!您可以使用 npm 透過 npm install electron@latest 安裝,或從我們的 發布網站 下載。請繼續閱讀以了解有關此版本的詳細資訊。

如果您有任何意見回饋,請在 Twitter 上與我們分享,或加入我們的社群 Discord!錯誤和功能請求可以在 Electron 的 issue tracker 中回報。

值得注意的變更

堆疊變更

重大變更

已棄用:webContents.getPrinters

webContents.getPrinters 方法已被棄用。請改用 webContents.getPrintersAsync

const w = new BrowserWindow({ show: false });

// Deprecated
console.log(w.webContents.getPrinters());
// Replace with
w.webContents.getPrintersAsync().then((printers) => {
console.log(printers);
});

已棄用:systemPreferences.{get,set}AppLevelAppearancesystemPreferences.appLevelAppearance

systemPreferences.getAppLevelAppearancesystemPreferences.setAppLevelAppearance 方法已被棄用,systemPreferences.appLevelAppearance 屬性也同樣被棄用。請改用 nativeTheme 模組。

// Deprecated
systemPreferences.getAppLevelAppearance();
// Replace with
nativeTheme.shouldUseDarkColors;

// Deprecated
systemPreferences.appLevelAppearance;
// Replace with
nativeTheme.shouldUseDarkColors;

// Deprecated
systemPreferences.setAppLevelAppearance('dark');
// Replace with
nativeTheme.themeSource = 'dark';

已棄用:systemPreferences.getColoralternate-selected-control-text

systemPreferences.getColoralternate-selected-control-text 值已被棄用。請改用 selected-content-background

// Deprecated
systemPreferences.getColor('alternate-selected-control-text');
// Replace with
systemPreferences.getColor('selected-content-background');

新功能

  • 新增了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend API。#39107
  • 新增了 safeStorage.setUsePlainTextEncryptionsafeStorage.getSelectedStorageBackend API。#39155
  • 在透過 ipcRenderer.sendTo() 發送的訊息中新增了 senderIsMainFrame#39206
  • 新增了將選單標記為由鍵盤啟動的功能。#38954

23.x.y 版本終止支援

Electron 23.x.y 已依照專案的 支援政策 終止支援。建議開發者和應用程式升級至較新版本的 Electron。

E26 (2023年8月)E27 (2023年10月)E28 (2024年1月)
26.x.y27.x.y28.x.y
25.x.y26.x.y27.x.y
24.x.y25.x.y26.x.y
22.x.y

下一步

在短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。

您可以在此處找到 Electron 的公開時程

有關未來變更的更多資訊,請參閱計畫的重大變更頁面。