You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron BrowserWindow禁用缩放问题:设置disableZoom后仍可缩放

如何彻底禁用Electron应用的缩放功能

你设置的disableZoom: true仅能禁用页面内的原生缩放控制(比如右键菜单的缩放选项),但无法拦截系统默认的快捷键(如CMD+/-)和应用菜单中的缩放指令,需要补充以下配置:

1. 拦截WebContents的缩放事件

在创建BrowserWindow实例后,监听webContents的zoom-changed事件,强制将缩放级别重置为1:

const win = new BrowserWindow({
    width: 1200,
    height: 1000,
    title: "MyApp",
    resizable: false,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
      contextIsolation: true,
      enableRemoteModule: false,
      webSecurity: true,
      zoomFactor: 1,
      disableZoom: true,
    },
});

// 强制锁定缩放级别
win.webContents.on('zoom-changed', (event) => {
  event.preventDefault();
  win.webContents.setZoomFactor(1);
});

2. 禁用默认菜单中的缩放选项

Electron的默认应用菜单包含缩放相关的选项和绑定快捷键,需要手动禁用或移除:

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

const defaultMenu = Menu.getApplicationMenu();
if (defaultMenu) {
  defaultMenu.items.forEach(menuItem => {
    // 定位到"视图"菜单(macOS为"View",Windows/Linux为"视图")
    if (menuItem.label === 'View' || menuItem.label === '视图') {
      menuItem.submenu.items.forEach(subItem => {
        // 禁用所有缩放相关菜单项
        if (subItem.label.includes('Zoom') || subItem.label.includes('缩放')) {
          subItem.enabled = false;
        }
      });
    }
  });
  // 更新应用菜单
  Menu.setApplicationMenu(defaultMenu);
}

3. 拦截键盘快捷键

如果上述配置仍有遗漏,可直接监听输入事件,阻止缩放快捷键的默认行为:

win.webContents.on('before-input-event', (event, input) => {
  // 拦截macOS的CMD+/-/0,以及Windows/Linux的Ctrl+/-/0
  const isZoomShortcut = (input.meta || input.control) && ['=', '-', '0'].includes(input.key);
  if (isZoomShortcut) {
    event.preventDefault();
  }
});

将以上三部分配置结合后,即可彻底禁用Electron应用的所有缩放途径,包括快捷键、菜单操作和页面内的缩放触发。

内容的提问来源于stack exchange,提问作者instantlink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 15:48:10