Я реализовал в своем электронном приложении простой протокол, который можно использовать для открытия приложения из браузера. Я также могу передать путь глубинной ссылки процессу рендеринга, чтобы перейти к определенному c представлению. Это отлично работает, когда приложение и окно запущены.
Когда приложение не запущено или окно не активно, использование протокола (myApp://
) открывает приложение, но у меня было не повезло с отправкой каких-либо параметров в процесс рендеринга.
Я использую следующую строку кода для отправки глубинной ссылки на процесс рендеринга win.webContents.send('deepLinkRoute', deepLinkingUrl)
, который снова отлично работает в одном месте, если окно / приложение активен, но не, если нет.
Единственный раз, когда я могу получить сообщение с глубинной ссылкой для успешной отправки процессу рендеринга, находится в пределах начального события app.on('open-url'
, если окно активно. В противном случае кажется, что никакое сообщение не запускается, даже если deepLinkingUrl
имеет значение.
let deepLinkingUrl: string = null
app.on('ready', () => {
createWindow()
if (deepLinkingUrl) {
win.webContents.send('deepLinkRoute', deepLinkingUrl) /* ❌ Not sending any message */
deepLinkingUrl = null
}
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (win === null) {
createWindow()
if (deepLinkingUrl) {
win.webContents.send('deepLinkRoute', deepLinkingUrl) /* ❌ Not sending any message */
deepLinkingUrl = null
}
}
})
app.setAsDefaultProtocolClient('myApp')
// Protocol handler for Mac OSX
app.on('open-url', function (event, url) {
event.preventDefault()
const path = url.split('//')[1]
if (win) {
/* ✅ Send a message to the render process to navigate to a specific route */
win.webContents.send('deepLinkRoute', path) /* Does send a message */
}
else {
/* App is not running, first start the app, create the window and then send message to render process to navigate to the desired path */
deepLinkingUrl = path
createWindow()
win.focus()
if (deepLinkingUrl) {
win.webContents.send('deepLinkRoute', deepLinkingUrl) /* ❌ Not sending any message */
deepLinkingUrl = null
}
}
})