Electron app.on ("open-url") альтернатива для пользовательского протокола в Windows - PullRequest
1 голос
/ 30 октября 2019

Я разрабатываю приложение в Electron, и мне нужно обработать собственный протокол внутри этого приложения.
Я использую app.setAsDefaultProtocolClient(PROTOCOL) для этого.

Яиспользуя « open-url » для macOS, чтобы обрабатывать URL с моим пользовательским протоколом, и он работает без сбоев, но я не могу понять это в Windows. Я отправляю некоторые данные в URL, поэтому простое открытие окна не сработает.

Я проверил этот ответ , но на этот вопрос ответили в 2016 году, а метод makeSingleInstance теперьосуждается. В документах предлагается использовать requestSingleInstanceLock, но не требуется никаких обратных вызовов или URL-адреса возврата.

Так как я могу включить одну и ту же функцию в macOS и Windows?


Код

index.js

app.on('ready', () => createWindow(`file://${__dirname}/views/welcome.html`));

app.on('activate', () => {
  // eslint-disable-next-line no-shadow,global-require
  const { mainWindow } = require('./utils/createWindow');
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (mainWindow === null) {
    createWindow(`file://${__dirname}/views/welcome.html`);
  }
});

app.on('open-url', handleOpenURL);

app.setAsDefaultProtocolClient(PROTOCOL);

handleOpenURL.js

module.exports = (e, data) => {
  e.preventDefault();
  // Some other Logic
  createWindow(URL);
}

1 Ответ

0 голосов
/ 01 ноября 2019

Взгляните на этот пример , он построен с использованием угловых и электронных.

Вам просто нужно убедиться в следующем для пользовательского URI для работы с окнами:

Сначала выполняется только одно мгновение, проверяя app.requestSingleInstanceLock(), верно ли это, затем вам нужно выйти из приложения app.quit(). потому что нам нужен только один экземпляр для запуска. Во-вторых, вы должны обработать событие second-instance app.on('second-instance', (event, args) => {})

const customSchemeName = 'x-company-app';
const primaryInstance = app.requestSingleInstanceLock();
if (!primaryInstance) {
        app.quit();
        return;
}

// The primary instance of the application will run this code, not the new  instance
app.on('second-instance', (event, args) => {
    // handle custom uri
}

...
// Register private URI scheme for the current user when running for the first time
app.setAsDefaultProtocolClient(customSchemeName);

// Handle custom uri requests against the running app on Mac OS
app.on('open-url', (event, customSchemeData) => {
    event.preventDefault();
    // handle the data
});
...

У меня была та же проблема с Windows, это исправило ее для меня, я проверил ее, и она работает. кредиты идет к Гэри Арчер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...