electron如何屏蔽鼠标上的前进后退快捷键?

electron如何屏蔽鼠标上的前进后退快捷键。

客户端项目,使用vue-router做路由跳转,经常误触鼠标前进后退快捷键。

阅读 568
avatarAI BotBETA
在 Electron 中屏蔽鼠标上的前进后退快捷键,可以通过监听 `webContents` 的 `will-navigate` 或 `did-navigate-in-page` 事件,并结合 Electron 的 `globalShortcut` 模块来管理快捷键,但针对鼠标的前进后退按钮,通常直接的方法是通过禁用这些按钮的功能来实现。

不过,Electron 本身没有直接提供 API 来禁用鼠标的前进后退按钮。这些按钮的行为通常由浏览器或渲染引擎控制,而不是由 Electron 控制的。然而,你可以通过以下方式间接地处理这个问题:

1. **使用 `beforeunload` 事件**:当用户尝试离开当前页面时,可以弹出一个确认对话框,阻止用户意外离开。虽然这不是直接禁用鼠标的前进后退按钮,但可以作为一种用户交互上的预防措施。
window.onbeforeunload = function (event) {
    event.preventDefault();
    event.returnValue = '';  // 兼容一些旧浏览器
    return '';              // 兼容 Chrome, Safari, Edge, Opera
};
```

**注意**:这种方法会影响所有尝试离开当前页面的行为,包括关闭标签页或浏览器窗口,以及使用地址栏输入新地址等。
  1. 调整 vue-router 的行为:确保 vue-router 的配置不会响应浏览器的前进后退操作,或者在响应时加入额外的逻辑判断,比如检查用户是否确实想要进行跳转。
  2. 使用 session.clearCachesession.clearStorageData:在某些情况下,你可能希望清除浏览器缓存或会话数据,以减少用户通过前进后退按钮访问旧页面的可能性。但这同样是一个间接的方法,且可能会对用户体验造成负面影响。
  3. 教育用户:通过 UI 设计或用户引导,告知用户如何正确使用应用程序,避免误触鼠标的前进后退按钮。

由于 Electron 和浏览器安全模型的限制,直接禁用鼠标的前进后退按钮目前是不可行的。上述方法提供了一种折衷的解决方案,旨在减少用户误触这些按钮的可能性。

2 个回答
// 阻止页面跳转(解决鼠标快捷键误触前进后退)
let navigateDisabled = false;

window.addEventListener('mouseup', event => {
    if ([4, 5].includes(event.which)) {
        navigateDisabled = true;
    } else {
        navigateDisabled = false;
    }
});

router.beforeEach(async (to, from, next) => {
    // 阻止鼠标快捷键引起的前进后退
    if (navigateDisabled) {
        next(false);

        navigateDisabled = false;
        return;
    }

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

let mainWindow;

app.on('ready', () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
    },
  });

  mainWindow.loadURL('file://' + __dirname + '/index.html');

  mainWindow.webContents.on('did-finish-load', () => {
    mainWindow.webContents.executeJavaScript(`
      document.addEventListener('mousedown', (event) => {
        if (event.button === 3 || event.button === 4) { // 3: BrowserBack, 4: BrowserForward
          event.preventDefault();
        }
      });
    `);
  });
});

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏