javascript - 当 contextIsolation 设置为 true 时,如何从 HTML 文件访问 require
问题描述
我正在尝试将电子放入此 HTML 文件,但require
未定义:
<script>
const electron = require("electron");
const {icpRenderer} = electron;
const form = document.querySelector("form");
form.addEventListener("submit", submitForm);
function submitForm(e){
e.preventDefault();
const item = document.querySelector("#item").value;
}
</script>
对于用于防止安全警告的 Web 首选项,我设置nodeIntegration
为 True,并且设置为 True。contextIsolation
我怎样才能require
通过这个文件?
在main.js
:
function createAddWindow(){
addWindow = new BrowserWindow({
width: 300,
height: 200,
title: "Add Inventory Item",
webPreferences: {
nodeIntegration: true,
worldSafeExecuteJavaScript: true,
contextIsolation: true
}
});
addWindow.loadURL(url.format({
pathname: path.join(__dirname, "addWindow.html"),
protocol: "file",
slashes: true
}));
addWindow.on("close", function(){
addWindow = null;
})
}
解决方案
我遇到的主要问题是contextIsolation
启用后无法使用require
.
要访问启用ipcRenderer
,contextIsolation
预加载文件用于contextBridge
公开某些功能ipcRenderer
:
preload.js
const { contextBridge, ipcRenderer } = require("electron");
contextBridge.exposeInMainWorld("myAPI", {
ipcSend: (...args) => ipcRenderer.send(...args),
ipcOn: (key, handler) => ipcRenderer.on(key, (event, ...args) => handler(...args))
});
main.js
function createAddWindow(){
subWindowOpen = true;
addWindow = new BrowserWindow({
width: 400,
height: 300,
title: "Add Inventory Item",
webPreferences: {
worldSafeExecuteJavaScript: true,
contextIsolation: true,
preload: path.join(__dirname, "preload.js")
}
});
addWindow.loadURL(url.format({
pathname: path.join(__dirname, "addWindow.html"),
protocol: "file",
slashes: true
}));
}
addWindow.html
<script>
myAPI.ipcSend("item:add", item);
</script>
nodeIntegration
可以在没有contextIsolation
启用的情况下使用,但这被认为是不安全的。最好只公开某些功能而不是整个对象。
推荐阅读
- pdf - 图像在 Microsoft Print to Pdf 中消失
- python - 使用 Python 删除 JSON 文件中未更新的文本/对象
- javascript - 无法让我的 Javascript 函数在 PHP foreach 循环中多次运行
- python - linux系统和本地网络上的socket.gethostbyaddr()
- database - 处理并发全局“库存”更新的通用策略
- java - 为什么 JIT 是 JVM 执行引擎的一部分?
- vb.net - 如何永久保存通过 vb.net 用户表单输入到 excel 中的数据,而不用输入的新数据替换以前的数据
- javascript - 在 gatsbyjs 中以编程方式创建页面时如何修复“TypeError:无法读取未定义的属性'节点'”
- html - 在css中设计悬停滑块下拉菜单
- flutter - 如何使用 Google 日历 API?