Открыть электронное приложение с протоколом прямых ссылок, когда приложение не запущено / не активно - PullRequest
1 голос
/ 04 августа 2020

Я реализовал в своем электронном приложении простой протокол, который можно использовать для открытия приложения из браузера. Я также могу передать путь глубинной ссылки процессу рендеринга, чтобы перейти к определенному 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 
    }
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...