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
模組。該模組可以針對 BrowserWindow
和 webview
標籤停用。
new BrowserWindow({
webPreferences: {
enableRemoteModule: false
}
})
<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
的值來傳回自訂值。
app.on('remote-require', function (event, webContents, requestedModuleName) {
});
browserWin.webContents.on(
'remote-require',
function (event, requestedModuleName) {
},
);
類似地,當呼叫 remote.getGlobal(name)
時,會引發 remote-get-global
事件。這與 remote-require
事件的運作方式相同:呼叫 preventDefault()
以防止傳回全域,並設定 event.returnValue
以傳回自訂值。
app.on(
'remote-get-global',
function (event, webContents, requrestedGlobalName) {
},
);
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
選項的預設值已被棄用,並改為以下列出的新預設值。
屬性 | 已棄用的預設值 | 新預設值 |
---|
contextIsolation | false | true |
nodeIntegration | true | false |
webviewTag | 如果已設定 nodeIntegration 的值,否則為 true | false |
請注意:目前存在 已知錯誤 (#9736),如果 contextIsolation
啟用,則會導致 webview
標籤無法正常運作。請密切關注 GitHub 上的問題以獲取最新資訊!
在 Electron 安全文件中了解更多關於 context isolation、Node 整合和 webview
標籤的資訊。
Electron 4.0 仍將使用目前的預設值,但如果您沒有明確傳遞這些選項的值,您將會看到棄用警告。為了讓您的應用程式為 Electron 5.0 做好準備,請為這些選項使用明確的值。請參閱 BrowserWindow
文件,以了解每個選項的詳細資訊。
webContents.findInPage(text[, options])
medialCapitalAsWordStart
和 wordStart
選項已棄用,因為它們已在上游移除。
應用程式意見反應計畫
我們在 Electron 3.0 開發期間建立的 應用程式回饋計畫 非常成功,因此我們在 4.0 的開發過程中也持續進行。我們要向 Atlassian、Discord、MS Teams、OpenFin、Slack、Symphony、WhatsApp 和其他計畫成員在 4.0 beta 週期中的參與表示衷心的感謝。若要了解更多關於應用程式回饋計畫的資訊並參與未來的 beta 版本,請查看我們關於該計畫的部落格文章。
下一步
短期內,您可以預期團隊將繼續專注於跟上構成 Electron 的主要元件(包括 Chromium、Node 和 V8)的開發。雖然我們謹慎地不對發布日期做出承諾,但我們的計畫是每季度左右發布包含這些元件新版本的新主要 Electron 版本。請參閱我們的版本控制文件,以了解更多關於 Electron 版本控制的詳細資訊。
如需有關即將推出的 Electron 版本中計劃的重大變更的資訊,請參閱我們計劃的重大變更文件。