【问题标题】:Child window in Electron does not always show on topElectron 中的子窗口并不总是显示在顶部
【发布时间】:2021-11-22 10:50:27
【问题描述】:

我正在尝试从主进程创建两个窗口。第二个窗口应始终显示在第一个窗口的顶部。在Electron website 上,我读到我必须创建一个父窗口和一个子窗口来执行此操作。 这是我的代码:

let win;
let child;

function createWindow(){
  // Create the browser window.
  win = new BrowserWindow({width: 1024, height: 768, show: false});

  child = new BrowserWindow({parent: win});
  child.show();

  win.once('ready-to-show', () => {
    win.show()
  })
  // and load the index.html of the app.
  win.loadURL(`file://${__dirname}/index.html`);

  // Emitted when the window is closed.
  win.on('closed', () => {
    win = null;
  });
}

app.on('ready', createWindow);

当我启动程序时,它会创建两个窗口,但子窗口并不总是在顶部。当我关闭父窗口(win)时,两个窗口都关闭了。 如何使子窗口始终显示在顶部? 我正在使用带有 Gnome 的 Fedora 24。

【问题讨论】:

  • 你在child-win init之后有没有试过用这个方法? child.setAlwaysOnTop(true);
  • @tehcpu 感谢您的回复。我尝试添加 child.setAlwaysOnTop(true);它有效。
  • 很好。不客气;)
  • @tehcpu 将此添加为答案。
  • @ShashwatKumar,好主意,完成了。

标签: javascript electron


【解决方案1】:

child-win init 后尝试使用child.setAlwaysOnTop(true); 方法。

【讨论】:

  • 它总是在所有应用程序之上,如果我们只想在电子应用程序本身之上呢?
  • @JasinYip 你可以使用new BrowserWindow({ parent: top })
【解决方案2】:

这里的问题是您在启动应用程序后直接显示子窗口,并在准备显示后显示父窗口,因此子窗口首先显示,父窗口显示在子窗口之上。

要让您的孩子显示在父窗口的顶部,您需要这样做:

win.once('ready-to-show', () => {
    win.show()
    child.show()
})

并删除顶部的child.show()

【讨论】:

    【解决方案3】:

    您可以使用焦点。

     win.on('focus',function(){
            if(child!=null && child.isVisible()){
                child.focus()
            }
        });
    

    它将子窗口设置在父窗口之上。

    【讨论】:

      【解决方案4】:

      这就是您可以始终在顶部窗口中执行的操作

      const { remote } = require('electron');
      stopScreenShareWin = new remote.BrowserWindow({ 
                          width: 400, 
                          height: 40, 
                          show:true, 
                          alwaysOnTop:true, 
                          frame: false,
                          titleBarStyle: 'hidden',
                          visibleOnAllWorkspaces:true , 
                          webPreferences: {
                              nodeIntegration: true
                          }
                      });
          stopScreenShareWin.loadFile('calls/screenshare-overlay.html');  
      

      【讨论】:

        【解决方案5】:

        根据你的问题,我想你需要一个 in windows 的对话框,而不是一个新的子窗口

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-05
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 1970-01-01
        • 2011-05-25
        相关资源
        最近更新 更多