Electron 4.0.0
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
模組。此模組可針對 BrowserWindow
和 webview
標籤停用
// 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
選項的預設值將被棄用,並改用下面列出的新預設值
屬性 | 已棄用的預設值 | 新預設值 |
---|---|---|
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 版本中進行重大變更的資訊,請參閱我們的計劃重大變更文檔。