gpt4 book ai didi

javascript - 当应用程序未在后台运行时,未触发 Electron 'open-url' 事件

转载 作者:行者123 更新时间:2023-11-30 06:20:07 27 4
gpt4 key购买 nike

当我在 macOS 上运行我的 Electron 应用程序时,我想读取 deeplinkingUrl 附带的所有参数。当我的应用程序在 Windows 上通过协议(protocol)调用时,我可以从 process.argv 中读取 deeplinkingUrl。但这在 macOS 上是不可能的,因为 process.argv 给出了 -psn... 并且它只在应用程序首次启动时给出了一次该参数。

我想在我的应用程序未在 macOS 后台运行时通过从浏览器调用协议(protocol)来触发 open-url。但此事件仅在应用程序运行时触发。当应用程序未运行时,应用程序会显示,但它不会根据 deeplinkingUrl 附带的操作进行导航。

我还在 package.json 中写了那些:

"protocols": {
"name": "My App",
"schemes": [
"myapp"
]
}

那些来自 electron.js 的:

let clickToCallObj = {};
let deeplinkingUrl;
let mainWindow;

app.on('open-url', (event, url) => {
event.preventDefault();

const isDefaultProtocolClientSet = app.isDefaultProtocolClient('myapp');

deeplinkingUrl = url;

clickToCallObj.operation = utils.getOperation(deeplinkingUrl); //e.g. myapp:/call/12345 -> operation: call

if (mainWindow && isDefaultProtocolClientSet) {
mainWindow.isMinimized() ? mainWindow.restore() : null;
mainWindow.focus();

sendClickToCallEvent(clickToCallObj, deeplinkingUrl); //takes the action with coming operation and deeplinkingUrl
}
});

那么,当我在 macOS 上调用我的应用程序而不在后台运行时,我该如何获取 deeplinkingUrl?

最佳答案

  1. app.on('will-finish-launching', ) 事件应该在 app.on('ready', )
  2. 之前被捕获
  3. isInvokedWhileAppIsNotRunning 参数设置为 true 并在应用程序加载完成后受到控制。
  4. 根据 electron 文档,open-url 事件已在 will-finish-launching 事件中使用它们的发生顺序。

    // Protocol handler for osx while application is not running in the background.
    app.on ('will-finish-launching' , () => {
    app.on('open-url', (event, url) => {


    event.preventDefault();

    deeplinkingUrl = url;

    const isDefaultProtocolClientSet = app.isDefaultProtocolClient(getProtocolName());
    clickToCallObj.operation = utils.getOperation(deeplinkingUrl);

    if (isDefaultProtocolClientSet) {
    clickToCallObj.isInvokedWhileAppIsNotRunning = true;
    }
    });
    });

    // Protocol handler for osx while the app is running in the background
    app.on('open-url', (event, url) => {
    event.preventDefault();

    const isDefaultProtocolClientSet = app.isDefaultProtocolClient(getProtocolName());

    clickToCallObj.operation = utils.getOperation(url);

    if (mainWindow && isDefaultProtocolClientSet) {
    mainWindow.isMinimized() ? mainWindow.restore() : null;
    mainWindow.focus();

    sendClickToCallEvent(clickToCallObj, url);
    }
    });

关于javascript - 当应用程序未在后台运行时,未触发 Electron 'open-url' 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53706348/

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