Electron 4.0穩定版發佈,集成Node 10和Chromium 69

Electron團隊宣佈推出Electron 4.0穩定版啦!新版本包含了升級、修復和新特性,更多信息請閱讀下文。

你現在可以從electronjs.org下載,或者通過npm install electron@latest來安裝它了。

新特性

Electron的很大一部分功能由Chromium、Node.js和V8提供,它們是構成Electron的核心組件。因此,Electron團隊的一個關鍵目標是儘可能跟上這些項目的變化,讓Electron用戶能夠使用新的Web和JavaScript特性。爲此,Electron 4將每個組件升級到主要版本,Electron 4對應的組件版本分別是:Chromium 69.0.3497.106、Node 10.11.0和V8 6.9.427.24。

此外,Electron 4還包括對Electron特定API的變更,下面將列出Electron 4中的一些主要變更,完整的變更列表請查看Electron 4發行說明

禁用remote模塊

你現在可以出於安全原因禁用remote模塊,可以爲BrowserWindows和webview標記禁用該模塊:

// BrowserWindow
new BrowserWindow({
  webPreferences: {
    enableRemoteModule: false
  }
})

// webview tag
<webview src="http://www.google.com/" enableremotemodule="false"></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()來防止返回global,並設置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’}創建的菜單項一樣。

控制WebContents的後臺Throttling

WebContents實例提供了setBackgroundThrottling(allowed)方法,在頁面失去焦點時啓用或禁用定時器和動畫的限制。

重大變更

不再支持macOS 10.9

Chromium不再支持macOS 10.9(OS X Mavericks),因此Electron 4.0及更高版本也不支持它。

單實例鎖定

之前,要讓應用程序成爲單實例應用(確保任何時候都只有一個應用程序實例在運行),你可以使用app.makeSingleInstance()方法。從Electron 4.0開始,你必須使用app.requestSingleInstanceLock()。這個方法的返回值表示應用程序實例是否成功獲得鎖。如果它無法獲得鎖,你可以認爲應用程序的另一個實例已經獲得鎖,並在運行當中,所以當前實例會立即退出。

win_delay_load_hook

在爲Windows構建原生模塊時,binding.gyp模塊中的win_delay_load_hook變量必須爲true(這是默認值)。如果這個hook不存在,那麼原生模塊將無法在Windows上加載,並顯示錯誤消息,如“Cannot find module”。

被棄用的特性

Electron 5.0將對以下特性做出重大變更,因此在Electron 4.0棄用它們。

對通過nativeWindowOpen打開的Windows禁用Node.js集成

從Electron 5.0開始,使用nativeWindowOpen選項打開的子窗口將始終禁用Node.js集成。

webPreferences默認值

通過設置webPreferences選項創建新BrowerWindow時,webPreferences的一些選項默認值發生變化:

Electron 4.0仍將使用當前默認值,但如果你沒有顯式爲它們提供值,將會看到棄用警告。

webContents.findInPage(text[, options])

medialCapitalAsWordStart和wordStart選項已被棄用,因爲它們在上游中已被移除。

App反饋計劃

我們在Electron 3.0開發過程中制定的App反饋計劃無疑是成功的,所以我們在4.0的開發過程中也繼續這樣做。要了解有關應用反饋計劃的更多信息並參與未來的測試版,請參閱我們的博文

後續的計劃

在短期內,我們將繼續專注於跟上主要組件的開發步伐,包括Chromium、Node和V8。我們儘量不對具體發佈日期做出承諾,不過,我們還是會計劃大約每季度發佈一次Electron的新主要版本。有關Electron版本控制的更多詳細信息,請參閱我們的版本控制文檔

有關即將發佈的Electron版本的重大變更,請參閱我們的計劃重大變更文檔

英文原文

https://electronjs.org/blog/electron-4-0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章