如何在 React-Electron 中使用 contextBridge?

How to use contextBridge in React-Electron?

我正在尝试连接预加载和 frame.tsx
但是,它不起作用。

frame.tsx

function handleButtonClick(id: string) {
    window.electron.send("requestWindowChange", "data") // Error part
    if(id === 'maximize') {
        setIsMaximize(!isMaximize)
    }
}

我简单补充一下。和...

preload.ts

import {contextBridge, ipcRenderer} from 'electron'

contextBridge.exposeInMainWorld('electron', {
    send: (channel:string, data) => {
        let normalChannels = ['requestWindowChange']
        if (normalChannels.includes(channel)) {
            ipcRenderer.send(channel, data)
        }
    },
    receive: (channel:string, func) => {
        let normalChannels = ['responseWindowChange']
        if (normalChannels.includes(channel)) {
            ipcRenderer.on(channel, (_event, data) => func(data))
        }
    }
})

此外,我已经使用 'tsc' 命令将 'preload.ts' 变为 'preload.js'。

最后,electron.ts

mainWindow = new BrowserWindow({
    height: 720,
    width: 1280,
    minHeight: 300,
    minWidth: 450,
    frame: false,
    show: false,
    center: true,
    fullscreen: false,
    kiosk: !isDev,
    resizable: true,
    webPreferences: {
        preload: path.join(__dirname, "preload.js")
    }
})

我只复制了必要的部分
如果您需要更多代码,请在此处评论。
我真的不知道为什么它不起作用。

any Property 'electron' does not exist on type 'Window & typeof globalThis'. Did you mean 'Electron'?ts(2551)

找了又问了一个星期,终于找到了。
只需将其添加到 frame.tsx.

declare global {
    interface Window {
        api? : any
    }
}

多么简单啊...