Как запустить мое электронное приложение с сайта - PullRequest
0 голосов
/ 29 ноября 2018

У нас есть электронное криптографическое приложение, которое подписывает транзакции (между прочим).

Мы хотим, чтобы у других веб-сайтов была возможность иметь кнопку, которая открывает это электронное приложение, предварительно заполненное некоторыми параметрами (информация о транзакции).

поток:

  1. пользователь нажимает кнопку «совершить транзакцию» на some-crypto-site.com
  2. приложение электронной почты открывается с предварительно заполненнымparams
  3. пользователь нажимает «подписать транзакцию» в электронном приложении
  4. электронное приложение делает что-то закулисное
  5. электронное приложение закрывается и отправляет сообщение some-crypto-site.com

Это можно сделать во время выполнения или во время установки.

То, что я пробовал (linux, chrome)

, вызов app.setAsDefaultProtocolClientс кодом этой сущности , которая в основном:

app.setAsDefaultProtocolClient("my-app")

Но после того, как я вставил my-app://foo?bar=baz в браузер Chrome, я получаю следующее всплывающее окно, и нажатие open-xdg ничего не делает(кроме закрытия всплывающего окна)

enter image description here

Я посмотрелв

  1. Электрон протокол API , который, кажется, обрабатывает только протоколы в приложении
  2. файл webtorrent .desktop Это может быть путь киди, я просто не знаю, как это сделать.

Может быть, есть способ сделать это во время установки через строитель электронов ?

Спасибозаранее за помощью, я понятия не имею, как поступить здесь!

Ресурсы, которые могут быть полезны

  1. Репозиторий Github с Mac + Пример окна
  2. комментарий github для linux
  3. комментарий github для linux 2
  4. SO ответ для всех 3 операционных систем
  5. SO windows answer
  6. npm пакет для windows регистрации
  7. SO mac answer
  8. SO linux answer
  9. документы Microsoft для Windows
  10. статья Windows
  11. GitHub комментарий для Windows
  12. Gitкомментарий хаба для mac
  13. info.plst для mac
  14. старый репозиторий для mac и win

1 Ответ

0 голосов
/ 04 декабря 2018

Поскольку это может иметь отношение к тому, что я делаю на работе, я решил попробовать.Я только что проверил это на OSX!

Я посмотрел документацию для app.setAsDefaultProtocolClient и там написано:

Примечание: на macOS,вы можете регистрировать только протоколы, которые были добавлены в info.plist вашего приложения, который нельзя изменить во время выполнения.Однако вы можете изменить файл с помощью простого текстового редактора или скрипта во время сборки.Подробнее см. В документации Apple.

Эти протоколы могут быть определены при упаковке приложения с electron-builder.См. build:

{
  "name": "foobar",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "dist": "electron-builder"
  },
  "devDependencies": {
    "electron": "^3.0.7",
    "electron-builder": "^20.38.2"
  },
  "dependencies": {},
  "build": {
    "appId": "foobar.id",
    "mac": {
      "category": "foo.bar.category"
    },
    "protocols": {
      "name": "foobar-protocol",
      "schemes": [
        "foobar"
      ]
    }
  }
}

В вашей основной теме:

const {app, BrowserWindow} = require('electron');

let mainWindow;

function createWindow () {
  mainWindow = new BrowserWindow({width: 800, height: 600})
  mainWindow.loadFile('index.html');
}

app.on('ready', createWindow);

var link;

// This will catch clicks on links such as <a href="foobar://abc=1">open in foobar</a>
app.on('open-url', function (event, data) {
  event.preventDefault();
  link = data;
});

app.setAsDefaultProtocolClient('foobar');

// Export so you can access it from the renderer thread
module.exports.getLink = () => link;

В вашей теме визуализации:

Обратите внимание на использование удаленный API для доступа к функции getLink, экспортированной в основной поток

<!DOCTYPE html>
<html>
  <body>
    <p>Received this data <input id="data"/></p>
    <script>
      const {getLink} = require('electron').remote.require('./main.js');
      document.querySelector('#data').value = getLink();
    </script>
  </body>
</html>

Пример

<a href="foobar://abc=1">open in foobar</a>

enter image description here

Это также позволяет запускать из командной строки:

open "foobar://xyz=1"

enter image description here

Как сделатьВы вернетесь к исходному абоненту?

Я полагаю, что при запуске приложения вы можете включить URL вызывающего абонента:

<a href="foobar://abc=1&caller=example.com”>open in foobar</a>

Когда ваше электронное приложение завершит обработку данных, онобудет просто пинговать этот URL

Кредиты

Большинство моих выводов основаны на:

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