Electron 中的 Child window 并不总是显示在顶部

Child window in Electron does not always show on top

我正在尝试从主进程创建两个 windows。第二个 window 应始终显示在第一个 window 之上。在 Electron website 上,我读到我必须创建一个 parent 和一个 child window 来执行此操作。 这是我的代码:

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

当我启动程序时,它会创建两个 windows,但 child window 并不总是在最前面。当我关闭 parent window (win) 时,两个 windows 都关闭了。 如何使 child window 始终显示在顶部? 我在 Gnome 上使用 Fedora 24。

在 child-win 初始化后尝试使用 child.setAlwaysOnTop(true); 方法。

这里的问题是您在启动应用程序后直接显示 child window 并且在 ready-to-show 之后显示 parent window 所以 child 首先显示,parent 在 child 之上显示。

要让您的 child 显示在 parent window 之上,您需要这样做:

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

并删除顶部的 child.show()

可以使用焦点。

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

它将子项 window 设置在父项之上。

这就是您可以始终保持领先地位的方法window

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');  

根据你的问题,我想你需要 windows 的对话框,而不是新的子 window