Electron 4.0.0
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
標籤停用
// 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(預設值)。如果此 hook 不存在,則原生模組將無法在 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 版本中計畫的重大變更的資訊,請參閱我們的計畫重大變更文件。