【问题标题】:Does BrowserWindow.fromId return windows that have been destroyed?BrowserWindow.fromId 是否返回已被破坏的窗口?
【发布时间】:2018-12-04 05:21:40
【问题描述】:

当我在 Electron 中创建 BrowserWindow 并对其进行操作时,我一直习惯性地检查窗口是否被破坏:

const window = new BrowserWindow(opts);
setMyWindow(window);

// ... later
const window = getMyWindow();
if (window && !window.isDestroyed()) {
    // do something on the window
}

原因是,如果用户关闭窗口,window 变量仍然会设置,因为我没有明确地将它清空,但我的BrowserWindow 包装的实际窗口将无效,那就是大概isDestroyed() 正在检查什么。

是否有不需要进行检查的时候?

具体来说,BrowserWindow.fromId(windowId); 是否返回被破坏的窗口?如果fromId 给了我一个窗口,我可以安全地不检查isDestroyed(),还是我还需要?

【问题讨论】:

    标签: electron


    【解决方案1】:

    进行了快速测试,如果您通过单击 X 或调用 window.close() 关闭 BrowserWindowBrowserWindow.fromId(myWindowId) 将返回 null

    因此,如果您通过BrowserWindow.fromId 获取窗口,则无需检查它是否被破坏。如果你不使用fromId,只是简单地从变量中存储和获取窗口,那么你仍然应该检查isDestroyed()

    话虽如此,我不确定是否还有其他情况需要调用isDestroyed() 是多余的。

    【讨论】:

    • 很高兴知道它返回null! ;) 但是,“那么你仍然应该检查 isDestroyed()”是不正确的。另一个(IMO 更好的)习惯是在“关闭”回调中设置对null 的窗口引用。这样你就可以if (window) { ... }
    • @pergy 好吧,我同意。我在想如果您不采取这些预防措施,那么您可能会遇到设置window,但isDestroyed() 为真的情况。我希望在关闭的回调中清除窗口引用将处理所有此类情况(isDestroyed() 为真)
    猜你喜欢
    • 2013-12-01
    • 2016-01-04
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2012-05-26
    • 2017-08-13
    相关资源
    最近更新 更多