在 Electron 中,在菜单打开时评估菜单项的状态
In Electron, evaluate a menu item's state when menu is opened
TL;DR:每次打开包含的菜单时,我都需要检查是禁用还是启用菜单项。我应该怎么做?
详细信息:在 Electron 应用程序的主菜单中,我有一个菜单项,只有当用户在剪贴板中有特定类型的数据时才应启用该菜单项 - 将其视为具体的粘贴功能。
访问剪贴板和评估数据的有效性很容易,但我找不到只有在打开包含此特定项目的菜单时才执行评估的方法。
数据将来自我的应用程序外部,因此我可以在 window 的焦点事件触发时检查剪贴板的内容。另一种选择是进行轮询。两者都不是很优雅,我希望有一个更明智的方法。
Electron 通过 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 月末,Electron 开发团队目前正在开发两种可能的解决方案:
- 可能会引入一个新事件,该事件会在剪贴板发生变化时触发 (GitHub issue)
- 动态菜单可能是当前开发的重点(Github issue)
TL;DR:每次打开包含的菜单时,我都需要检查是禁用还是启用菜单项。我应该怎么做?
详细信息:在 Electron 应用程序的主菜单中,我有一个菜单项,只有当用户在剪贴板中有特定类型的数据时才应启用该菜单项 - 将其视为具体的粘贴功能。
访问剪贴板和评估数据的有效性很容易,但我找不到只有在打开包含此特定项目的菜单时才执行评估的方法。
数据将来自我的应用程序外部,因此我可以在 window 的焦点事件触发时检查剪贴板的内容。另一种选择是进行轮询。两者都不是很优雅,我希望有一个更明智的方法。
Electron 通过 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 月末,Electron 开发团队目前正在开发两种可能的解决方案:
- 可能会引入一个新事件,该事件会在剪贴板发生变化时触发 (GitHub issue)
- 动态菜单可能是当前开发的重点(Github issue)