Ответ 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>
Это также позволяет запускать из командной строки:
open "foobar://xyz=1"
Как вы вернетесь к первоначальному звонилку?
Я предполагаю, что когда вы запускаете приложение, вы можете включить URL вызывающего абонента:
<a href="foobar://abc=1&caller=example.com">open in foobar</a>
Когда ваше электронное приложение завершит обработку данных, оно просто отзовет этот URL
кредиты
Большинство моих выводов основаны на:
- Из этого выпуска GitHub
- И отличная работа от @oikonomopo