electron 支持所有可通过菜单角色触发的操作,也可通过编程方式触发,

hwazgwia  于 2个月前  发布在  Electron
关注(0)|答案(2)|浏览(38)

我认为几乎所有可以通过具有特殊 role 属性的菜单项触发的操作,都应该能够通过编程方式触发。原因是对于像VSCode这样的实现自定义菜单栏和/或命令板的应用,你希望能够在原生菜单中显示所有可以通过使用特殊 role 属性在原生菜单中显示的操作。

以下是当前所有角色的列表,带有表示它们是否可以被编程方式触发的emoji,以及触发它们的可能方法(在我的知识范围内):

  • appMenu: 这个角色实际上不会触发操作。
  • fileMenu: 这个角色实际上不会触发操作。
  • editMenu: 这个角色实际上不会触发操作。
  • viewMenu: 这个角色实际上不会触发操作。
  • windowMenu: 这个角色实际上不会触发操作。
  • help: 这个角色实际上不会触发操作。
  • services: 无需为此API提供API。
  • window: 这个角色实际上不会触发操作。
  • undo: document.execCommand ( 'undo' ) .
  • redo: document.execCommand ( 'redo' ) .
  • cut: document.execCommand ( 'cut' ) .
  • copy: document.execCommand ( 'copy' ) .
  • paste: document.execCommand ( 'paste' ) .
  • pasteAndMatchStyle
  • delete: document.execCommand ( 'delete' ) .
  • selectAll: document.execCommand ( 'selectAll' ) .
  • reload: BrowserWindow#webContents#reload .
  • forceReload: BrowserWindow#webContents#reloadIgnoringCache .
  • minimize: BrowserWindow#minimize .
  • close: window.close () .
  • togglefullscreen: BrowserWindow#setFullScreen + BrowserWindow#isFullScreen .
  • 一个 BrowserWindow#toggleFullscreen 方法会很好。
  • toggleDevTools: BrowserWindow#webContents#toggleDevTools .
  • resetZoom: document.documentElement.style.zoom = 1 .
  • zoomIn: document.documentElement.style.zoom = Number ( document.documentElement.style.zoom || 1 ) + .1 .
  • zoomOut: document.documentElement.style.zoom = Number ( document.documentElement.style.zoom || 1 ) - .1 .
  • about: app.showAboutPanel
  • quit: app.quit
  • startSpeaking: 也许可以使用applescript来实现这个功能,但这个功能很可能是由Electron本身提供的。
  • stopSpeaking: 也许可以使用applescript来实现这个功能,但这个功能很可能是由Electron本身提供的。
  • zoom: 也许可以使用applescript来实现这个功能,但这个功能很可能是由Electron本身提供的。
  • recentDocuments
  • clearRecentDocumentsapp.clearRecentDocuments
  • hide
  • BrowserWindow#getAllWindows 不返回开发者工具窗口。
  • 一旦我调用了 BrowserWindow#hide 我就无法再以某种原因显示该窗口了,Dock -> Show All Windows 也无法显示它。
  • 一个 BrowserWindow.hideAll 可能很好。
  • hideOthers: 也许可以使用applescript来实现这个功能,但这个功能很可能是由Electron本身提供的。
  • unhide: 也许可以使用applescript来实现这个功能,但这个功能很可能是由Electron本身提供的。
  • 这个角色似乎没有一个很好的名称,它似乎是 hide 角色的反义词,但 hide 只隐藏了我们的Electron应用,而 unhide 则隐藏了一切。
  • front: 也许可以在通过 BrowserWindow#getAllWindows 检索到的所有窗口上调用 BrowserWindow#getAllWindows 以实现这一点,但 BrowserWindow#mergeAllWindows 并不会返回所有窗口(没有开发者工具,并且没有更改开发者工具窗口可见性的方法)。
  • mergeAllWindows: BrowserWindow#mergeAllWindows .
  • selectNextTab: BrowserWindow#selectNextTab .
  • selectPreviousTab: BrowserWindow#selectPreviousTab .
  • toggleTabBar: BrowserWindow#toggleTabbar .
  • moveTabToNewWindow: BrowserWindow#moveTabToNewWindow
5w9g7ksd

5w9g7ksd1#

fabiospampinato,你看过Menu.sendActionToFirstResponder吗?

dhxwm5r4

dhxwm5r42#

@bpasero 不用惊慌,感谢提供的链接!显然这里还有一个原生操作列表,一些角色Map到这些操作。
我保持这个开放是因为:

  • 我认为这里有一些很好的可操作反馈
  • 我希望有独立的方法可以触发通过有点神秘的 Menu.sendActionToFirstReponder 触发的操作
  • 如果这个 Menu.sendActionToFirstReponder API 有更好的文档/更易于访问,我会非常高兴,至少会在这个和这个的文档中链接
  • 如果有一个可以复制 pasteAndMatchStyle 的操作,我没有找到它
  • 具有 unhide 角色的菜单项只有在实际上有任何隐藏应用时才会启用,我认为没有API可以理解这种情况,所以这种逻辑似乎无法完全重新实现

相关问题