Electron作為一個跨平台的前端架構,已經聞名好多年了,現在開始學習可能顯得有點晚,不過遲到總比沒有強,從現在開始一步一步的學吧。
遇到問題
剛剛開始開發第一個demo,是參考的網上找的教程。
可能是這個教程出的還比較早,在跟随教程步驟開發時,Electron視窗雖然打開了,但裡面一直沒有内容。
後來通過調試工具發現報了一個require is not a function錯誤。
問題原因
由于require可以直接請求運作客戶機上的檔案,容易引起安全問題,而在Electron 12以後的版本中被禁止。Electron官方文檔原文如下:
上下文隔離功能将確定您的 預加載腳本 和Electron的内部邏輯 運作在所加載的webcontent網頁 之外的另一個獨立的上下文環境裡。 這對安全性很重要,因為它有助于阻止網站通路Electron的内部元件 和 您的預加載腳本可通路的高等級權限的API 。
這意味着,實際上,您的預加載腳本通路的window對象并不是網站所能通路的對象。例如,如果您在預加載腳本中設定window.hello = 'wave'并且啟用了上下文隔離,當網站嘗試通路window.hello對象時将傳回undefined。
自Electron 12以來,預設情況下已啟用上下文隔離,并且它是 所有應用程式推薦的安全設定。
解決方案
如果需要直接飲用客戶機上的檔案,則需要設定web上下文contextIsolation選項為false。
修改後,本地使用require時,程式就正常跑起來了。
影響
不過,看官方文檔描述,并沒有提到require的問題,由此不難分析出,這麼設定并不是針對解決這個問題的,而是解決上下文隔離的問題,那這樣的話,修改了contextIsolation的值,必然會影響到上下文隔離相關的API。具體來說,就是contextBridge API将不能使用。
本文永久連結: https://www.mulianju.com/electron-note__require/