electron 如何允许所有渲染器访问预加载的函数?

o8x7eapl  于 2023-09-28  发布在  Electron
关注(0)|答案(1)|浏览(145)

我正在尝试让我的主渲染器打开第二个渲染器,它将显示一个文件(如图像或视频)。我有一个函数可以在renderer.js中完成这个任务,它工作得很好,但是当我试图在specific.js中使用它时,它抛出了一个Cannot read property of undefined, 'openFile()'

//main.js
const { app, BroswerWindow, ipcMain, dialog } = require('electron')
const path = require('path')

async function handleFileOpen() {
    const {canceled, filePath} = await dialog.showOpenDialog()
    if(canceled) return

    let fullPath = path.resolve(filePaths[0])
    let name = path.basename(fullPath)
    let extension = path.extname(name)

    return {
        filePath: fullPath.
        name: name,
        extension: extension
    }
}

const createWindow = () => {
    //created the window with preload.js as the preload under webPreferences
}

app.whenRead().then(() => {
    ipcMain.handle('dialog:openFile', handleFileOpen)
    //other ipc communications not used in this example

    createWindow()
})
//preload.js
const {contextBridge, ipcRenderer} = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
    openFile: () => ipcRenderer.invoke('dialog:openFile')
    //other ipc references similar to the one above
})

specific.jsmain.jspreload.jsrenderer.js在同一个文件夹中。它也与使用script标记引用它的html文件位于同一个文件夹中。还应该注意的是,openFile()函数的代码是electron文档中给出的示例的修改版本:ipc模式#2渲染器到主程序双向。我也知道contextBridge.exposeInIsolatedWorld()函数,但我在文档中找不到任何关于如何获得worldId的信息。
如何允许specific.js使用openFile()

ac1kyiln

ac1kyiln1#

我通过在main.js中创建第二个函数来解决这个问题,它创建了一个新窗口,可以通过webPreferences: {preload: path.join(__dirname, 'preload.js'}访问preload.js

相关问题