gpt4 book ai didi

javascript - 将一些初始数据传递到新窗口的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 12:41:33 25 4
gpt4 key购买 nike

我只是在学习Electron,并且正在尝试打开文件并在新窗口中显示它。我在初始(根)窗口中单击一个按钮,然后打开“打开文件”对话框,从中可以获取文件路径。然后,我想打开该文件,创建一个窗口,然后将文件的内容传递到新窗口。我的问题是在窗口准备就绪时,将包含文件内容的字符串放入回调函数中。我什至可能吗?我的main.js代码:

function createWindow (templateFile, initialData) 
{ console.log("Creating window....")
newWindow = new BrowserWindow({width: 800,
height: 600,
webPreferences: {preload: path.join(__dirname, 'preload.js'),
nodeIntegration: true}
})
newWindow.loadFile(templateFile)
newWindow.webContents.openDevTools()
//This is what doesn't work; I want to take the initialData argument to the createWindow function,
//and get it into the 'did-finish-load' callback function
newWindow.webContents.on('did-finish-load', (event, initialData) =>
{ windowsArray[newWindow.webContents.id] = newWindow
console.log(initialData)
newWindow.webContents.send("initialDataLoad", initialData)
})
newWindow.on('closed', function () {newWindow.object = null})
}

ipcMain.on("new-sheet", (event, gameDefinitionFile) =>
{ console.log("Loading " + gameDefinitionFile)
let gameDefContents
fs.readFile(gameDefinitionFile, 'ascii', (err, gameDefContents) => {})
createWindow("defaultSheet.html", gameDefContents)
})


我已经读到您可以在webContents对象上创建一个新属性,然后在渲染器过程中引用它,但这听起来不像是正确的做法。那么,我该怎么办呢?

完整代码在 https://gitlab.com/sjbrown8/osiris

最佳答案

webContents方法应该可以轻松解决您的问题。简单明了:您可以预先创建和收集窗口所需的所有数据,然后使用该窗口生成窗口。
webContents方式有一些限制,因为您在webContents上创建的main对象已序列化并发送到render-意思是,两个进程都有该对象的独立版本:

  • 在数据的渲染过程版本上应用于对象的更改将不会反射(reflect)在主要(反之亦然)
  • 您不能传递函数(例如使用它在渲染过程中从main调用函数)

  • 但是有了简单的初始化数据:这很容易理解。

    编辑:

    当然,发送方法需要一个 channel 名称和一个可选的对象,即要发送的数据。您可以这样编写一个函数:
    sendPersonData(personData) => {
    webContents.send('person-data-updated', personData);
    );

    或者,如果您想要一个需要回调以灵活发送的函数,请执行以下操作:
    updatePersonData(personData, senderCallback) => {
    updatedPersonData = functionToUpdatePersonData(personData);
    senderCallback(personData);
    }

    // and use that like so:
    updatePersonData({name: 'John Doe'}, sendPersonData);

    关于javascript - 将一些初始数据传递到新窗口的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60357827/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com