我正在开发一个用Electron Package 的web应用程序,我试图找到一种简单的方法将var从main process传递到preload.js,这样我以后就可以从我的BrowserWindow
中获取它。
我知道我们可以使用IPC从主进程向渲染器视图发送/接收数据,但我发现这种方式有时太复杂,无法获取简单的数据。
此外,我不想将BrowserWindow webPreferences.nodeIntegration
设置为true,因为这可能是XSS攻击的裂缝,如这里解释的。
我找到了一种方法(如下)将var从主进程传递到preload.js中的contextBridge
,这样我以后就可以从我的BrowserWindow
的JS代码中获取这些var。
index.js(主进程)
process.env.MY_SUPER_VAR = 'Hello'
preload.js
const { contextBridge } = require("electron");
contextBridge.exposeInMainWorld(
"electron", {
mySuperVar : process.env.MY_SUPER_VAR
});
script.js(稍后从page.html加载)
console.log(window.electron.mySuperVar);// 'Hello'
这是一种正确的做法吗?安全吗?任何建议/意见/例子都是受欢迎的。谢谢!
1条答案
按热度按时间1qczuiv01#
我是那个发布你提到的评论的人。
你可以使用
process.env
,但我推荐使用process.argv
,因为它更符合属性的预期用途(env
用于特定于环境的设置,argv
用于特定于应用程序的设置),否则,它们的功能非常相似。您可以通过
BrowserWindow
上的additionalArguments
属性设置argv
值。作为参考的一个例子,我在我的secure-electron-template
存储库中这样做。示例
在你的preload.js文件中,你可以把这个值取出来,然后按你喜欢的方式使用它。
需要注意的是,我建议在
additionalArguments
的每个元素前面加上--
,以便正确传递值,并且 * 不包括 * 任何\
,它是does not work when you do not follow these rules。