提问人:Faks 提问时间:4/19/2023 更新时间:5/3/2023 访问量:305
使用 process.env 将 vars 从主进程传递到 Electron 中的预加载脚本 - 不错的选择?
Using process.env to pass vars from main process to preload script in Electron - Good option?
问:
我正在开发一个用 Electron 包装的 Web 应用程序,我试图找到一种简单的方法将 vars 从主进程传递到预加载.js,以便我以后可以从我的 .BrowserWindow
我知道我们可以使用 IPC 将数据从主进程发送/接收到渲染器视图,但我发现这种方式有时太复杂了,无法仅获取简单的数据。
另外,我不想将 BrowserWindow 设置为 true,因为这可能是 XSS 攻击的破解,如此处所述。webPreferences.nodeIntegration
我找到了一种方法(如下)将变量从主进程传递到 preload.js 中的 a,以便我以后可以从我的 JS 代码中获取这些变量。contextBridge
BrowserWindow
index.js(主进程)
process.env.MY_SUPER_VAR = 'Hello'
预加载.js
const { contextBridge } = require("electron");
contextBridge.exposeInMainWorld(
"electron", {
mySuperVar : process.env.MY_SUPER_VAR
});
script.js(稍后从 page.html 加载)
console.log(window.electron.mySuperVar);// 'Hello'
这是一种正确的做法吗?安全吗? 欢迎任何建议/建议/示例。谢谢!
答:
我是发布你提到的评论的人。
您可以使用 ,但我建议这样做,因为它更符合属性的预期用途 - (用于特定于环境的设置,用于特定于应用程序的设置),否则,它们的功能足够相似。process.env
process.argv
env
argv
可以通过 BrowserWindow
上的属性设置值。作为一个例子,我在我的secure-electron-template
存储库中这样做。argv
additionalArguments
例
win = new BrowserWindow({
width: 800,
height: 600,
title: "Application is currently initializing...",
webPreferences: {
additionalArguments: [`--customValue=${value}`],
preload: path.join(__dirname, "preload.js")
}
});
在 preload.js 文件中,您可以提取值并根据需要使用它。
const arg = process.argv.filter(p => p.indexOf("--customValue=") >= 0)[0];
const argValue = arg.substr(arg.indexOf("=") + 1);
需要注意的是,我建议在with的每个元素前面加上前缀,以便正确传递值,并且不包含任何,当您不遵循这些规则时,它将不起作用。additionalArguments
--
\
评论