【问题标题】:Close window but not app on click of "x" on Mac OS with node webkit在带有节点 webkit 的 Mac OS 上单击“x”时关闭窗口但不是应用程序
【发布时间】:2026-01-06 20:15:01
【问题描述】:

通常在 mac 上,当我关闭窗口时它不会退出应用程序,但是当使用 node webkit 时它会退出应用程序。

有谁知道解决方法,所以当我点击“x”时它只会关闭窗口而不是应用程序?

提前感谢您的帮助。

【问题讨论】:

  • #fyi: 还没找到解决办法...
  • 新答案不是一个完整的解决方案,因此赏金可能会在没有获胜者的情况下到期

标签: macos webkit node-webkit


【解决方案1】:

这在 MAC 中适用于我:

var gui = require('nw.gui');
var window = gui.Window.get();

gui.App.on('reopen', function(){
    window.show();
})

window.on('close', function(){
    window.hide();
});

使用上面的代码,如果用户点击关闭按钮,它会隐藏窗口而不是终止应用程序。
当用户从 Dock 中点击应用程序图标时,GUI reopen 事件被触发,该事件将显示隐藏窗口。
注意:重新打开当前是 MAC 特有的功能。
NodeWebkit App Features中提供了更多详细信息

【讨论】:

  • 一个改进,但这样用户就不能从菜单中关闭应用程序
  • @FezVrasta 我认为用户可以通过右键单击图标并选择quit从菜单/停靠栏关闭/退出应用程序
  • 它在 MAC 中为我工作,包括从扩展坞强制退出应用程序。如果以防万一,应用程序没有通过右键单击从停靠栏为您关闭,那么您可以在@FezVrasta 提到的关闭功能中添加gui.App.quit()
【解决方案2】:

不是一个完整的解决方案,所有功劳都归功于 Abhishek 的回答。

我对其进行了改进,允许用户关闭应用程序,而不仅仅是退出窗口。

  var hidden = false;
  gui.App.on('reopen', function(){
    hidden = false;
    win.show();
  })

  win.on('close', function(){
    if (hidden == true) {
      gui.App.quit();
    } else {
      win.hide();
      hidden = true;
    }
  });

使用这个技巧,当您第一次单击红色按钮时,窗口会关闭但仍会在 Dock 中运行,然后,右键单击图标并单击 退出,应用程序将完全关闭。

【讨论】:

    【解决方案3】:

    如果单击“退出”,则窗口将参数传递给回调函数,无论是从菜单栏还是停靠栏(也在 command+Q 上)。 我正在使用此代码,它按预期工作:

    var gui = require('nw.gui'),
        app = gui.App,
        win = gui.Window.get();
    
    win.on('close', function (action) {
        'quit' === action ?
            app.quit() :
            win.hide();
    });
    
    app.on('reopen', function(){
        win.show();
    });
    

    【讨论】:

      【解决方案4】:

      是的,有办法。我称之为命令+Q。 另一种方法是 command+control+power

      【讨论】:

        最近更新 更多