![](/img/trans.png)
[英]Error after updating electron and changin nodeIntegration to true
[英]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.