首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BrowserWindow.fromWebContents时如何设置电子菜单的自定义x,y位置

使用BrowserWindow.fromWebContents时如何设置电子菜单的自定义x,y位置
EN

Stack Overflow用户
提问于 2022-03-07 05:51:36
回答 1查看 288关注 0票数 0

我使用contextBridgecontextIsolation在单击时创建自定义上下文菜单,并在docs:https://github.com/electron/electron/blob/main/docs/api/menu.md#render-process中使用了这个示例

代码语言:javascript
复制
// renderer
window.addEventListener('contextmenu', (e) => {
  e.preventDefault()
  ipcRenderer.send('show-context-menu')
})

ipcRenderer.on('context-menu-command', (e, command) => {
  // ...
})

// main
ipcMain.on('show-context-menu', (event) => {
  const template = [
    {
      label: 'Menu Item 1',
      click: () => { event.sender.send('context-menu-command', 'menu-item-1') }
    },
    { type: 'separator' },
    { label: 'Menu Item 2', type: 'checkbox', checked: true }
  ]
  const menu = Menu.buildFromTemplate(template)
  menu.popup(BrowserWindow.fromWebContents(event.sender))
})

这是可行的,但是上下文菜单就出现在鼠标下面。我想提供一个自定义的x和y. In the docs for menu.popup,我可以设置如下的xy属性:

代码语言:javascript
复制
menu.popup({
  window: /* my window object /*,
  x: /* x position */,
  y: /* y position */,
})

但我不知道如何将这些属性添加到从BrowserWindow.fromWebContents(event.sender)返回的对象中。

我尝试了这些选择:

代码语言:javascript
复制
menu.popup({ ...BrowserWindow.fromWebContents(event.sender), x, y } );
// or
const window = BrowserWindow.fromWebContents(event.sender);
menu.popup({ window, x, y });

我得到了这个错误

代码语言:javascript
复制
Error processing argument at index 1, conversion failure from 
at EventEmitter.a.popup (node:electron/js2c/browser_init:81:3188)

似乎电子不喜欢将来自BrowserWindow.fromWebContents(event.sender)的结果转换为一个对象。

我也尝试过这个,但是得到了同样的错误。

代码语言:javascript
复制
const window = BrowserWindow.fromWebContents(event.sender);
window.x = x;
window.y = y;
menu.popup(window);

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-07 22:01:04

问题的结果是,xy变量需要是整数,有时它们是浮点数。把Math.round放在xy上解决了这个问题。这最终起了作用:

代码语言:javascript
复制
const xRound = Math.round(x);
const yRound = Math.round(y);
const window = BrowserWindow.fromWebContents(event.sender);
menu.popup({ window, x: xRound, y: yRound } );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71376903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档