【发布时间】:2020-12-05 23:43:56
【问题描述】:
问题
你好,我是电子初学者。
我知道使用contextBridge 是在 Electron 中制作安全应用的好方法。
我想在contextBridge中实现一个contextMenu(右键菜单)来指定Renderer进程中的Main进程要做什么进程,但是我做不到。
你能给我一些建议吗?
我的代码
main.js(主进程)(部分初始化)
function createWindow() {
mainWindow = new BrowserWindow({
width: 960,
height: 540,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
enableRemoteModule: false,
preload: __dirname + "/preload.js"
}
});
mainWindow.loadFile(__dirname + "/index.html");
}
preload.js
const contextBridge = require("electron");
const remote = require("electron").remote;
const Menu =remote.Menu;
const MenuItem=remote.MenuItem;
contextBridge.exposeInMainWorld(
"api", {
menu:()=>{
const menu = new Menu();
// label definition
menu.append(new MenuItem({
label: 'MenuItem1',
click() {
console.log('item 1 clicked');
}
}));
// right clicked
window.addEventListener('contextmenu', (e) => {
e.preventDefault();
menu.popup({
window: remote.getCurrentWindow()
});
}, false);
}
}
);
index.html(渲染器进程)
<!DOCTYPE html>
<html>
<head>
<script>
window.api.menu();
</script>
</head>
<body>
</body>
</html>
我尝试了什么
一开始,这是失败的。
仅将main.js 中的webreferences 更改为nodeIntegration:true(不使用contextBridge)并将preload.js 的menu 放入<script> 中index.html,我可以实现contextMenu。
但是我知道这种方式不能制作安全的应用程序,因为没有使用contextBridge。
main.js
function createWindow() {
mainWindow = new BrowserWindow({
width: 960,
height: 540,
webPreferences: {
nodeIntegration: true // changing false to true, deleting the others
}
});
mainWindow.loadFile(__dirname + "/index.html");
}
preload.js
没有变化(因为没有加载)
index.html
<!DOCTYPE html>
<html>
<head>
<script>
// add the following
const remote = require("electron").remote;
const Menu =remote.Menu;
const MenuItem=remote.MenuItem;
const menu = new Menu();
// label definition
menu.append(new MenuItem({
label: 'MenuItem1',
click() {
console.log('item 1 clicked');
}
}));
// right cliced
window.addEventListener('contextmenu', (e) => {
e.preventDefault();
menu.popup({
window: remote.getCurrentWindow()
});
}, false);
</script>
</head>
<body>
</body>
</html>
感谢您阅读到最后。
【问题讨论】:
标签: electron