pus*_*kin 6 google-chrome-devtools electron
我想让我的 Electron 应用程序切换开发人员工具以响应 F12。
在渲染器页面中,我添加了:
const currentWebContents = require("electron").remote.getCurrentWebContents();
window.addEventListener("keydown", (e: KeyboardEvent) => {
if (e.keyCode === 123) { // F12
currentWebContents.toggleDevTools();
}
});
Run Code Online (Sandbox Code Playgroud)
当我专注于主页时,这会起作用。但是,开发工具打开后,焦点立即转到开发工具,因此F12不再检测到。
我尝试通过在调用后立即向 devtools webcontents 添加侦听器来解决此问题,toggleDevTools()如下所示:
if (currentWebContents.devToolsWebContents) {
currentWebContents.devToolsWebContents.on("before-input-event", (event: Electron.Event, input: Electron.Input) => {
if (input.type === "keyDown" && input.key === "F12") {
currentWebContents.toggleDevTools();
}
});
}
Run Code Online (Sandbox Code Playgroud)
然而,打开后currentWebContents.devToolsWebContents就是这样。null我的第一个问题是如何确保它不是null- 有没有办法等到它完全打开?
我通过将if (currentWebContents.devToolsWebContents)代码放入setTimeout(..., 1000);
然而,这样做后,当我before-input-event专注于开发工具时按下按键时,我的处理程序不会被触发。
有人知道这是为什么吗?
没有简单的方法可以做到这一点。
根据此问题,您无法检测来自开发工具的输入。
一位 Electron 开发人员在这里发表了评论:
我认为这是因为toggleDevTools 菜单角色没有正确检查devtools 窗口的“父”窗口。可能可以使用toggleDevTools菜单角色检查当前聚焦的窗口是否是devtools窗口,如果是,则在打开devtools的webcontents上调用toggleDevTools,而不是在devtools窗口本身。
无论如何,这都需要Electron开发来解决。
更新:这里有人建议了这个解决方法 - 我自己还没有尝试过:
mainWindow.webContents.on("before-input-event", (e, input) => {
if (input.type === "keyDown" && input.key === "F12") {
mainWindow.webContents.toggleDevTools();
mainWindow.webContents.on('devtools-opened', () => {
// Can't use mainWindow.webContents.devToolsWebContents.on("before-input-event") - it just doesn't intercept any events.
mainWindow.webContents.devToolsWebContents.executeJavaScript(`
new Promise((resolve)=> {
addEventListener("keydown", (event) => {
if (event.key === "F12") {
resolve();
}
}, { once: true });
})
`)
.then(() => {
mainWindow.webContents.toggleDevTools();
});
});
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3776 次 |
| 最近记录: |