预检清单
- 我已阅读了此项目的 Contributing Guidelines。
- 我同意遵循此项目遵循的 Code of Conduct。
- 我在 issue tracker 中搜索了一个与我想提交的功能请求相匹配的功能请求,但没有成功。
问题描述
在使用多个窗口创建 Electron 应用程序时,很难区分这些窗口。
Electron API 提供了一种识别 Electron 窗口的方法,除了它的 id(只是一个数字)、它的标题(可能会随着 i18n 或应用程序状态而改变)或其 webContents 的一些方面(如 URL,可能会改变)。
建议的解决方案
向 BrowserWindow 选项添加一个简单的 "label"(字符串)属性,以便开发人员可以识别和区分应用程序中的窗口。
function createWindows() {
const win = new BrowserWindow({
label: 'first_window',
})
win.loadURL('https://example.com')
const win2 = new BrowserWindow({
label: 'second_window',
})
win2.loadURL('https://example2.com')
const win3 = new BrowserWindow({
label: 'third_window',
})
win3.loadURL('https://example3.com')
}
createWindows()
function updateWindow1(state: State) {
const windows = BrowserWindow.getAllWindows()
const win1 = windows.find((w) => w.label === 'first_window'))
if (win1) {
win1.webContents.send('state', state)
}
}
考虑的其他方案
更灵活的解决方案是使用一个 "labels" 属性,该属性接受一个字符串数组。这可能是用唯一和非唯一标识符标记窗口的一种方法。
function createWindows() {
const win = new BrowserWindow({
labels: ['first_window', 'controller'],
})
win.loadURL('https://example.com')
const win2 = new BrowserWindow({
labels: ['second_window', 'output'],
})
win2.loadURL('https://example2.com')
const win3 = new BrowserWindow({
labels: ['third_window', 'output'],
})
win3.loadURL('https://example3.com')
}
createWindows()
function updateWindow1(state: State) {
const windows = BrowserWindow.getAllWindows()
const win1 = windows.find((w) => w.labels.includes('first_window'))
if (win1) {
win1.webContents.send('state', state)
}
}
其他信息
- 无响应*
1条答案
按热度按时间kulphzqa1#
你能帮我更多地解决这个问题吗?我是开源的新手,我理解你的意思了吗?我应该以什么方式为这个做出贡献?