gol*_*cks 14 electron electron-builder
我们有一个签署交易的电子加密应用程序(除此之外).
我们希望其他网站能够拥有一个打开该电子应用程序的按钮,预先填充了一些参数(交易信息).
流程是:
这可以在运行时或安装时完成.
app.setAsDefaultProtocolClient
用这个要点的代码调用,基本上是:
app.setAsDefaultProtocolClient("my-app")
Run Code Online (Sandbox Code Playgroud)
但是在我放入my-app://foo?bar=baz
Chrome浏览器之后,我得到以下弹出窗口,按下open-xdg什么都不做(除了解除弹出窗口)
也许有一种方法可以在安装时通过电子制造商这样做?
在此先感谢您的帮助,我不知道如何继续前进!
cus*_*der 16
由于这可能与我在工作中所做的相关,我决定试一试.我只在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"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
在你的主线程中:
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;
Run Code Online (Sandbox Code Playgroud)
在您的渲染器线程中:
请注意使用远程 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>
Run Code Online (Sandbox Code Playgroud)
例
<a href="foobar://abc=1">open in foobar</a>
Run Code Online (Sandbox Code Playgroud)
这也允许您从命令行启动:
open "foobar://xyz=1"
Run Code Online (Sandbox Code Playgroud)
你如何回到原来的来电者?
我想当你启动应用程序时,你可以包含来电者网址:
<a href="foobar://abc=1&caller=example.com”>open in foobar</a>
Run Code Online (Sandbox Code Playgroud)
当您的电子应用程序完成处理数据时,它只会ping回该网址
积分
我的大部分发现都基于:
归档时间: |
|
查看次数: |
3036 次 |
最近记录: |