在Electron中,在菜单打开时评估菜单项的状态

时间:2016-06-12 15:08:33

标签: javascript electron

TL; DR :每次打开包含菜单时,我都需要检查是否禁用或启用菜单项。我该怎么办?

详细信息:在Electron应用程序的主菜单中,我有一个菜单项,只有当用户在剪贴板中有某种数据时才能启用它 - 将其视为特定的一种粘贴功能。

访问剪贴板并评估数据的有效性很简单,但只有在打开包含此特定项目的菜单时,我才能找到执行评估的方法。

数据将来自我的应用程序外部,因此每当窗口的焦点事件触发时,我都可以检查剪贴板的内容。另一种选择是进行民意调查。两者都不是很优雅,我希望有更明智的方法。

1 个答案:

答案 0 :(得分:2)

电子通过menu.SetApplicationMenu(menu) function公开菜单控件。

每次事件触发时,通过远程模块监听window.focus事件并设置此菜单可以使您实现所需的功能:

<!-- index.html -->
<script>
const {remote} = require('electron');
const {Menu, MenuItem} = remote;

const menu = new Menu();
menu.append(new MenuItem({label: 'MenuItem1', click() { console.log('item 1 clicked'); }}));


window.addEventListener('focus', (e) => {   remote.setApplicationMenu(menu); }, true);

</script>

有关详细信息和上面的代码段,请参阅electron menu API。我实际上没有测试过代码,但它应该勾勒出一个解决方案。

有关未来可能解决方案的其他信息:

截至2016年6月底,电子开发团队目前正在开发两种可能的解决方案:

  1. 可能会引入新事件,该事件会在剪贴板中更改时触发(GitHub issue
  2. 动态菜单是当前开发中可能关注的焦点(Github issue