簡體   English   中英

Electron - 要求未定義,盡管 nodeIntegration 為真

[英]Electron - require is not defined, despite nodeIntegration being true

我的問題是 - 我有一個 main.js 文件和一個 functions.js 文件,我希望我的一些函數在其中。 但是,每當我在該 functions.js 文件中使用 require 時,都會出現錯誤,require 未定義。

我讀過關於其他人有類似問題的帖子,但在他們的情況下,將 nodeIntegration 設置為 true 有幫助。 這就是我從一開始就擁有的。 我知道這個解決方案的問題,但目前我不需要應用程序是安全的,所以如果它有效,我會很好地使用這個解決方案。 它沒有。

我嘗試過預加載,但我認為它只是 nodeIntegration 解決方案的“更安全”等價物。 作為一個等價物,它也不起作用。 你能幫助我嗎?

我的代碼:

main.js

const { app, BrowserWindow, ipcMain } = require('electron')

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: true,
      preload: 'functions.js'
    }
  })
  win.maximize();
  win.loadFile('index.html');
}

app.on('ready', function() {
  createWindow();
  createOpenDialog();
});

functions.js (從字面上看,這就是代碼失敗所需要的全部)

const electron = require('electron');

索引.html

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="main.css">
    <meta charset="UTF-8">
    <title>Hello World!</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body style="background: white;">
    <script src="functions.js">
    </script>
</body>
</html>

所以,我沒有嘗試的一件事是將 contextIsolation 設置為 false 至少看起來是這樣,因為我確定我試過了。 無論如何,這似乎解決了這個問題,盡管我需要了解它究竟做了什么。 我現在可以做“要求”,並且已經通過使用 ipcRenderer 測試了它是否有效。

上下文隔離是 Electron 上存在的安全功能。 它的全部目的是將預加載腳本和 Electrons 內部 api 從您的網站中分離出來,因此它沒有任何不應該擁有的訪問權限。

從 Electron 開始 12 上下文隔離默認關閉。這意味着如果您需要在預加載腳本中公開某些功能,則必須使用上下文橋

文檔中的一個示例是這樣的:

在上下文隔離關閉之前

window.myAPI = {
  doAThing: () => {}
}

之后:上下文隔離開啟

const { contextBridge } = require('electron')

contextBridge.exposeInMainWorld('myAPI', {
  doAThing: () => {}
})

您可以在文檔中閱讀有關此功能的更多信息: https://www.electronjs.org/docs/tutorial/context-isolation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM