为了账号安全,请及时绑定邮箱和手机立即绑定

Electron 中自定义 HTML 对话框的问题

Electron 中自定义 HTML 对话框的问题

元芳怎么了 2022-12-09 15:36:17
所以首先,我知道以下问题Custom HTML Dialog in Electron already exists。当最新版本的电子出现一些问题时,我的问题扩展了这个问题。所以一些背景:我实际上开始了我的一个项目,就像v2.0.5我已经拥有的 Electron() 上的一个非常旧的版本,因为我懒得更新 electron。我有一个工作对话类,你可以这样做:let dialog = new dialog_class("./pages/dialog.html")dialog.display().then((response) => console.log(response));但是我必须将我的版本更新到 current( v9.1.1) 所以我的对话当然坏了,但我不知道如何/为什么。我非常像这样创建我的对话框:constructor(link){    this.link = link;    this.window = new electron.remote.BrowserWindow({...});}display(){    return new Promise((callback)=>{        this.window.loadURL(...);//url.format function in place of ...        this.window.on(`close`, () => {            if (!this.cancelCloseEvent) callback(false);        });    }}destroy(){    this.window.closable = true;    this.widow.close();}但是,当我运行此功能时:function openDialog(){    let dialog = new dialog_class("./pages/dialog.html")    dialog.display().then((response) => console.log(response));}我可以完美打开对话框,但只能关闭一次对话框。就像我可以打开它,关闭它然后再次打开它但不能再次关闭它。当我第二次尝试关闭它时,它会保持对话框打开并抛出这个:electron/js2c/renderer_init.js:82 Uncaught TypeError: Object has been destroyed    at BrowserWindow.get (electron/js2c/browser_init.js:125)    at electron/js2c/browser_init.js:233    at IpcMainImpl.<anonymous> (electron/js2c/browser_init.js:233)    at IpcMainImpl.emit (events.js:223)    at WebContents.<anonymous> (electron/js2c/browser_init.js:173)    at WebContents.emit (events.js:223)我不知道为什么会这样,因为每次我运行openDialog它都应该创建一个新的 BrowserWindow,所以我不知道它是如何引用旧窗口的。注意:这里显示的所有代码应该足以解决我的问题。但以防万一这里是整个dialog_class:https ://pastebin.com/7pAwZJHF
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

dialog.js


display(context) {

        return new Promise((cb) => {

            electron.ipcRenderer.on("callback", (event, val) => {

                this._cancelCloseEvent = true;  

                cb(val);

                // this.destroy(); WRONG!!! Remove this and destory your window on test.js which is having this object instance

            });

        }

        ...

test.js


dialog.display().then(function(value) {

    response.innerText = value;

    dialog.destroy();

    // dialog = null; unnecessary!

});


查看完整回答
反对 回复 2022-12-09
  • 1 回答
  • 0 关注
  • 367 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号