gpt4 book ai didi

electron - 如何从网站启动我的 Electron 应用程序

转载 作者:行者123 更新时间:2023-12-03 22:18:46 25 4
gpt4 key购买 nike

我们有一个 Electron 加密应用程序来签署交易(除其他外)。

我们希望其他网站能够有一个按钮来打开该 Electron 应用程序,并预先填充一些参数(交易信息)。

流量是:

  • 用户在 some-crypto-site.com
  • 上单击“进行交易”
  • Electron 应用打开预填充参数
  • 用户在 Electron 应用程序中点击“签署交易”
  • Electron 应用在幕后做事
  • Electron 应用程序关闭并向 some-crypto-site.com
  • 发送消息

    这可以在运行时或安装时完成。

    我试过的(linux,chrome)

    调用 app.setAsDefaultProtocolClient 代码为 this gist ,这基本上是:
    app.setAsDefaultProtocolClient("my-app")

    但是在我放了 my-app://foo?bar=baz之后在 chrome 浏览器中,我得到以下弹出窗口,然后按 open-xdg 什么都不做(除了关闭弹出窗口)

    enter image description here

    我调查了
  • Electron protocol api似乎只处理应用内协议(protocol)
  • webtorrent .desktop file这可能是要走的路,我只是不知道该怎么做。

  • 也许有一种方法可以在安装时通过 electron builder ?

    提前感谢您的帮助,我不知道如何在这里进行!

    可能有用的资源
  • github repo with mac+window example
  • github comment for linux
  • github comment for linux 2
  • SO answer for all 3 OSs
  • SO windows answer
  • npm package for windows registery
  • SO mac answer
  • SO linux answer
  • microsoft docs for windows
  • windows article
  • github comment for windows
  • github comment for mac
  • info.plst for mac
  • old repo for mac and win
  • 最佳答案

    因为这可能与我在工作中所做的事情有关,所以我决定试一试。
    我只在 OSX 上测试过这个!
    我查看了 app.setAsDefaultProtocolClient 的文档它说:

    Note: On macOS, you can only register protocols that have been added to your app's info.plist, which can not be modified at runtime. You can however change the file with a simple text editor or script during build time. Please refer to Apple's documentation for details.


    这些协议(protocol)可以在使用 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;
    在您的渲染器线程中:
    注意 remote 的使用访问 getLink 的 API在主线程中导出的函数
    <!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>
    当您的 Electron 应用程序完成处理数据时,它会简单地 ping 回该 url
    学分
    我的大部分发现基于:
  • 从此GitHub issue
  • excellent work来自@oikonomopo
  • 关于electron - 如何从网站启动我的 Electron 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530726/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com