【问题标题】:How to create a close, maximize and minimize buttons without remote?如何在没有遥控器的情况下创建关闭、最大化和最小化按钮?
【发布时间】:2020-10-24 14:48:02
【问题描述】:

创建一个无框窗口,我需要 3 个操作按钮来“关闭”、“最小化”和“最大化”。

我以前是这样创建它们的:

在我的 main.js 中:

function createWindow () {
  const mainWindow = new BrowserWindow({
    (...)
    frame:false,
    webPreferences: {
      nodeIntegration: true,
      (...)
    }
  })

而在我的页面JS文件里面,我只是用来写的:

const {remote} = require('electron');

function close() {
    var window = remote.getCurrentWindow();
    window.close();
  }

function minimize() {
    var window = remote.getCurrentWindow();
    window.minimize();
  }

它仍然有效.. 但我收到此警告:

"Electron Deprecation Warning The 'remote' module is deprecated and will be disabled in the future version of Electron. 为了确保顺利升级并消除此警告,请在 WebPreferences 中指定 {enableRemoteModule: true}这个窗口。”

而且我真的找不到不使用遥控器来执行此操作的方法。 我很感激任何帮助!谢谢

【问题讨论】:

    标签: electron


    【解决方案1】:

    您应该从渲染器进程向主进程发送消息。

    所以在你的渲染器进程中添加一个事件到你的最大化按钮并发送一条消息:

    const ipc = require('electron').ipcRenderer;
    ipc.send('max');
    

    在您的主进程中收到此消息:

    ipcMain.on('max', () => {
        //mainWindow is the reference to your window
        mainWindow.maximize()
    })
    

    要在主进程中启用 ipcMain,请像这样添加 ipcMain:

    const {app, BrowserWindow, ipcMain} = require('electron');
    

    这里是一个可视化主要流程的示例:

    Here is the breaking changes note from electron
    Here is a good article about it

    【讨论】:

    • 效果很好。谢谢!
    【解决方案2】:

    您可以使用 BrowserWindow 静态方法,而不是在 createWindow 方法中添加一个 ipc 侦听器(这可能会导致一些问题,尤其是在处理多个窗口时)。 例如,我的菜单中有一个重新加载按钮,我可以通过它实现我想要的(在主进程上,你可以使用 ipcRenderer 从渲染器进程中调用它):

    menuTemplate.push({
                    label: app.getName(),
                    submenu: [
                        {role: 'about'},
                        {type: 'separator'},
                        {
                            label: 'return to previous page',
                            click: () => BrowserWindow.getFocusedWindow().webContents.goBack(),
                        },
                        {
                            label: 'refresh',
                            click: () => BrowserWindow.getFocusedWindow().webContents.reloadIgnoringCache(),
                        }
                    ]
    });
    

    BrowserWindow.getFocusedWindow() 帮了我大忙

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2016-03-04
      • 2016-10-04
      • 1970-01-01
      • 2011-03-13
      • 2012-12-09
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多