我正在用React Typescript为UI框架制作一个电子应用程序,我在实现自定义标题栏的最小化,最大化和关闭按钮的功能时遇到了麻烦。
基本上,我有一个React组件WindowControlButton.tsx
,它应该运行一个函数来关闭/min/max窗口。我还没有能够实现一个功能,桥梁电子和React,使窗口实际上是关闭的,虽然。
在electron的main.js
文件中,我有以下内容:
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true,
enableRemoteModule: true,
contextIsolation: false,
}
字符串
在preload.js
中:
contextBridge.exposeInMainWorld('windowControlAPI', {
minimizeApp: () => { ipcRenderer.send('minimize') },
maximizeApp: () => { ipcRenderer.send('maximize') },
closeApp: () => { ipcRenderer.send('close') }
});
型
然后,回到main.js
:
ipcMain.on('close', () => { win.close() });
ipcMain.on('minimize', () => { win.minimize() });
ipcMain.on('maximize', () => {
if (win.isMaximized()) win.unmaximize()
else win.maximize()
});
型
最后,在WindowControlButton.tsx
中,我有:
declare global {
interface Window {
windowControlAPI: {
minimizeApp: () => void,
maximizeApp: () => void,
closeApp: () => void
};
}
}
// These are kind of just to show how I'm trying to use the functions I've defined above
const closeApp = () => { window.windowControlAPI.closeApp() }
const minimizeApp = () => { window.windowControlAPI.minimizeApp() }
const maximizeApp = () => { window.windowControlAPI.maximizeApp() }
型
注意:如果没有declare global
块,Typescript会抛出错误,说windowControlAPI
不存在。目前,项目编译和显示都很好,但是单击按钮会抛出Cannot read properties of undefined (reading 'closeApp')
(我猜它在window.windowControlAPI
上找不到closeApp()
。有没有人能提出一个更好的方法来做到这一点(我已经尝试了很多不同的解决方案,所以现在看起来可能像一吨的东西混合在一起),或者为什么我的React组件似乎无法连接到电子源?
Thanks:)
1条答案
按热度按时间k5ifujac1#
无法读取undefined的属性(阅读“closeApp”)
表示窗口。windowControlAPI未定义。
你的预加载文件真的加载了吗?
你有正确的路径到你的预加载文件吗?
希望这对你有帮助!