【问题标题】:How to switch electron between windows with false or true frame, depending on the url如何在具有假或真框架的窗口之间切换电子,具体取决于 url
【发布时间】:2021-08-16 23:20:18
【问题描述】:

我正在电子中创建一个应用程序,该应用程序从登录屏幕上带有错误框架的窗口开始。我想知道当应用程序 url 更改时,如何将 frame 属性从“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)**
   }
})

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

【问题讨论】:

    标签: javascript vue.js electron vue-cli


    【解决方案1】:

    我不相信 Electron 目前提供了一种在创建窗口后将窗口从无框更改为有框或反之亦然的方法。

    另一种方法是在您在应该有框架或无框架的页面之间导航时动态创建和销毁窗口。这显然有很多开销并且会丢失内存中的数据,因此只有在例如您只需要初始登录屏幕是无框的情况下才实用。对于这种狭隘的情况,您可能会这样做:

    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 也可以用来在两个或多个不同的窗口之间传送一个连续的webContents

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

    【讨论】:

    • 正如您所说,打开新窗口时效果很好,但我丢失了数据。通过这种方式,我将尝试重新调整我的应用程序以使其具有另一种外观。谢谢你回答我。
    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2022-11-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多