如何在 windows 与 false 或 true 框架之间切换电子,具体取决于 url

How to switch electron between windows with false or true frame, depending on the url

我正在用 electron 创建一个应用程序,它以 window 开头,登录屏幕上有错误的框架。我想知道如何在应用程序 url 更改时将框架 属性 从“false”更改为“true”。

示例:

let win = new BrowserWindow({
    width: 1000,
    height: 650,
    frame: false,
    transparent: true
})

win.webContents.on('did-navigate-in-page', (event) => {
   if(win.webContents.getURL() == 'http://localhost:8080/#/'){
      **win.setFrame(false)**
   }else{
      **win.setFrame(true)**
   }
})

如果你能帮助我,非常感谢。我希望我已经很好地解释了我所需要的。

我不认为 Electron 目前提供了一种方法来在 window 创建后将其从无框架更改为有框架,反之亦然。

一种替代方法是在应该有框架或无框架的页面之间导航时即时创建和销毁 windows。这显然有很多开销并且会丢失 in-memory 数据,因此只有在例如您只需要初始登录屏幕无框架的情况下才实用。对于那种狭窄的情况,你可以这样做:

let loginWin = new BrowserWindow({
    width: 1000,
    height: 650,
    frame: false,
    transparent: true
})

loginWin.webContents.on('did-navigate-in-page', (event) => {
    if(loginWin.webContents.getURL() == 'http://localhost:8080/#/'){
        let mainWin = new BrowserWindow({
            width: 1000,
            height: 650
        })
        mainWin.loadURL('http://localhost:8080/#/')
        loginWin.destroy()
    }
})

我想,实验性的 BrowserView API 也可以用来在两个或多个不同的 windows 之间传送一个连续的 webContents

如果您确实需要更频繁地添加和删除 window chrome,另一种选择是自己绘制 chrome。它不会具有 OS 的原生样式,但会具有您需要的灵活性。这是一个为您处理标题栏部分的包:frameless-titlebar。不确定是否需要可拖动边框。