Как запустить мое электронное приложение с веб-сайта

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

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

поток это:

  1. пользователь нажимает кнопку "совершить транзакцию" на сайте some-crypto-site.com
  2. электронное приложение открывается с предварительно заполненными параметрами
  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 file Это может быть путь, я просто не знаю, как это сделать.

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

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

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

  1. GitHub репо с примером Mac + окна
  2. GitHub комментарий для Linux
  3. GitHub комментарий для Linux 2
  4. ТАК отвечу за все 3 ОС
  5. ТАК окна отвечают
  6. пакет npm для регистрации Windows
  7. ТАК макинтош ответ
  8. ТАК линукс ответ
  9. Microsoft документы для Windows
  10. статья о windows
  11. GitHub комментарий для Windows
  12. GitHub комментарий для Mac
  13. info.plst для Mac
  14. старый репо для Mac и выиграть

Ответы

Ответ 1

Поскольку это может иметь отношение к тому, что я делаю на работе, я решил попробовать. Я только проверил это на 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

кредиты

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

Ответ 2

Приведенный выше ответ сработал потрясающе !!!.. спасибо.. как только в браузере открыто, как интегрировать приложение с некоторым пакетным скриптом sftp