我正在尝试让我的主渲染器打开第二个渲染器,它将显示一个文件(如图像或视频)。我有一个函数可以在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.js
与main.js
、preload.js
和renderer.js
在同一个文件夹中。它也与使用script标记引用它的html文件位于同一个文件夹中。还应该注意的是,openFile()
函数的代码是electron文档中给出的示例的修改版本:ipc模式#2渲染器到主程序双向。我也知道contextBridge.exposeInIsolatedWorld()
函数,但我在文档中找不到任何关于如何获得worldId
的信息。
如何允许specific.js
使用openFile()
?
1条答案
按热度按时间ac1kyiln1#
我通过在
main.js
中创建第二个函数来解决这个问题,它创建了一个新窗口,可以通过webPreferences: {preload: path.join(__dirname, 'preload.js'}
访问preload.js
。