Electron 如何从网站启动我的电子应用程序

Electron 如何从网站启动我的电子应用程序,electron,electron-builder,Electron,Electron Builder,我们有一个电子加密应用程序,用于签署交易(以及其他事项) 我们希望其他网站能够有一个按钮,打开电子应用程序,预先填写一些参数(交易信息) 流量为: 用户在some-crypto-site.com上单击“进行交易” electron应用程序以预填充参数打开 用户在electron应用程序中单击“签署交易” electron应用程序在幕后做一些事情 electron应用程序关闭并向some-crypto-site.com发送消息 这可以在运行时完成,也可以在安装时完成 我尝试的(linux、chro

我们有一个电子加密应用程序,用于签署交易(以及其他事项)

我们希望其他网站能够有一个按钮,打开电子应用程序,预先填写一些参数(交易信息)

流量为:

  • 用户在some-crypto-site.com上单击“进行交易”
  • electron应用程序以预填充参数打开
  • 用户在electron应用程序中单击“签署交易”
  • electron应用程序在幕后做一些事情
  • electron应用程序关闭并向some-crypto-site.com发送消息
  • 这可以在运行时完成,也可以在安装时完成

    我尝试的(linux、chrome) 使用的代码调用,基本上是:

    app.setAsDefaultProtocolClient("my-app")
    
    但是在我把
    我的-app://foo?bar=baz
    在chrome浏览器中,我看到以下弹出窗口,按open xdg不做任何操作(除了关闭弹出窗口)

    我调查
  • Electron似乎只处理应用程序内协议
  • 这可能是一条路,我只是不知道该怎么走
  • 也许有一种方法可以在安装时通过

    提前感谢您的帮助,我不知道如何在这里继续

    可能有用的资源

  • 由于这可能与我在工作中所做的有关,我决定试一试。 我只在OSX上测试过

    我查看了的文档,上面说:

    注意:在macOS上,您只能注册已添加到应用程序info.plist的协议,该协议在运行时无法修改。但是,您可以在构建期间使用简单的文本编辑器或脚本更改文件。有关详细信息,请参阅苹果的文档

    使用
    electron builder
    打包应用程序时,可以定义这些协议。请参见
    构建

    {
    “名称”:“foobar”,
    “版本”:“1.0.0”,
    “main”:“main.js”,
    “脚本”:{
    “开始”:“电子”,
    “dist”:“electron builder”
    },
    “依赖性”:{
    “电子”:“^3.0.7”,
    “electron builder”:“^20.38.2”
    },
    “依赖项”:{},
    “构建”:{
    “appId”:“foobar.id”,
    “mac”:{
    “类别”:“foo.bar.category”
    },
    “议定书”:{
    “名称”:“foobar协议”,
    “计划”:[
    “foobar”
    ]
    }
    }
    }
    
    在主线程中:

    const{app,BrowserWindow}=require('electron');
    让主窗口打开;
    函数createWindow(){
    mainWindow=新浏览器窗口({宽度:800,高度:600})
    mainWindow.loadFile('index.html');
    }
    应用程序打开(“就绪”,创建窗口);
    var-link;
    //这将捕获对链接的点击,例如
    app.on('open-url',函数(事件、数据){
    event.preventDefault();
    链接=数据;
    });
    app.setAsDefaultProtocolClient('foobar');
    //导出,以便可以从渲染器线程访问它
    module.exports.getLink=()=>link;
    
    在渲染器线程中:

    注意使用API访问主线程中导出的
    getLink
    函数

    
    收到了这个数据

    const{getLink}=require('electron').remote.require('./main.js'); document.querySelector('#data')。value=getLink();
    示例

    
    

    这还允许您从命令行启动:

    open "foobar://xyz=1"
    

    您如何回复原来电人?

    我想,当您启动应用程序时,您可以包括呼叫者url:

    
    
    当你的电子应用程序处理完数据后,它会简单地ping回那个url

    学分

    我的大部分调查结果基于:

    • 由此
    • 以及来自@oikonomopo的

    调用
    app.setAsDefaultProtocolClient(“我的应用”)
    ,然后用
    my打开它-app://foo?bar=baz
    导致调用“your/path/electron.exe my”-app://foo?bar=baz" . delectron.exe将其第一个参数作为应用程序路径,因此它不起作用。@Hiitger感谢您的评论,我不明白您说的是什么。你能澄清一下吗?你好,我不确定你是否真的可以从chrome上打开一个Electron应用程序,但如果它已经打开了,你可以发送东西给它。可以吗?太好了,我会尽快调查的!这对您的开发有用吗,或者您必须制作一个安装程序并安装它才能在您的本地机器上工作?再次感谢!实际上我还没试过。这确实是针对一个打包和安装的应用程序进行的测试。在linux上,我尝试了一个压缩打包的应用程序,但它不起作用。目前,我们没有使用linux安装程序,因此无法对其进行测试。如果我们让它工作,将更新。请注意,
    openurl
    事件仅适用于mac。Windows和Linux将需要使用
    process.argv
    的argv参数来循环遍历这些参数,并检查其中是否有一个是用于启动应用程序的url。