ОБНОВЛЕНО НИЖЕ
Примечание. Это приложение предназначено только для окон, поэтому оно исключает "открытый URL" и т.д.
У меня есть протокол, работающий для моего приложения, и он успешно открывает электронное приложение, однако то, что я ищу, так это, если приложение открыто, и пользователь нажимает на ссылку протокола с параметрами (my-app://go/to/это/раздел), он откроет текущее приложение и запустит функцию, чтобы перейти к ссылке.
То, что на самом деле происходит на минуту, - это приложение открывает другую версию самого себя и не передает аргументы.
У меня есть функция setAsDefaultProtocolClient
в моем приложении app.js, чтобы попытаться поймать любые экземпляры протокола, но это, похоже, не работает.
const {remote} = window.require('electron');
remote.app.setAsDefaultProtocolClient( 'my-app' );
У меня также есть функция makeSingleInstance
в моем основном процессе, позволяющая только один экземпляр приложения запускаться за один раз, но, похоже, он не посылает аргументы, которые я передаю с протоколом при закрытии второго клиента.
// Make sure there is only 1 instance of the app running at a time
const isSecondInstance = app.makeSingleInstance((commandLine, workingDirectory) => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
}
});
// If this is a second instance of the app close it
if (isSecondInstance) {
app.quit();
}
ОБНОВИТЬ:
Теперь у меня появилось второе окно с протоколом к исходному экземпляру приложения, но я не могу зарегистрировать аргументы.
Всякий раз, когда я регистрирую process.argv
и использую 'my-app://section/29, это только каталог каталога установки и не имеет никаких параметров.
Я добавил следующее к makeSingleInstance
if (process.platform == 'win32') {
deeplinkingUrl = process;
// Keep only command line / deep linked arguments
logEverywhere( process );
}
Здесь logEverywhere
только для справки:
function logEverywhere(s) {
console.log(s);
if (mainWindow && mainWindow.webContents) {
mainWindow.webContents.executeJavaScript('console.log("${s}")');
}
}
В функции makeSingleInstance
имеется параметр commandLine
который содержит массив аргументов командной строки второго экземпляра, который будет включать URL-адрес протокола.
Таким образом, вы должны написать что-то вроде этого:
var isSecondInstance = exports.app.makeSingleInstance(function (commandLine, workingDirectory) {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
var protocolLink = commandLine[1];
// Run function to go to link.
}
});
if (isSecondInstance) {
app.quit();
}
Если переменная protocolLink
является ссылкой, на которую пользователь нажал.