gpt4 book ai didi

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

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

首先,我知道以下问题 Custom HTML Dialog in Electron已经存在。当最新版本的 Electron 出现一些问题时,我的问题扩展了这个问题。
所以一些上下文:
我实际上开始了我的一个项目,就像我已经拥有的 Electron(v2.0.5)上的一个非常旧的版本,因为我懒得更新 Electron。我有一个工作对话类,你 可以 做这样的事情:

let dialog = new dialog_class("./pages/dialog.html")
dialog.display().then((response) => console.log(response));
但是,我必须将我的版本更新为当前版本( 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
编辑:
由于我对此悬赏,我希望人们能够重现该问题。这是您需要的所有代码: https://github.com/Frustrated-Programmer/ElectronBug
然而 :我仍然认为这个问题中仍然提供了所有相关的代码

最佳答案

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!
});

关于javascript - Electron 中自定义 HTML 对话框的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63125631/

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