通过webextension进行Firefox本机消息传递

问题描述 投票:1回答:1

为firefox创建了一个webextension(目前使用Nightly 52),它使用本机消息传递在Linux上启动java程序(Ubuntu 14,32x)。

webextension加载,读取.json文件并读取指向启动java程序的脚本的路径。我使用时JSON和路径是正确的:

var native = browser.runtime.connectNative("passwordmanager");
console.log("native.name" + native.name); //outputs passwordmanager.
native.onDisconnect.addListener(function(m) { console.log("Disconnected"); });

上面的代码打印本机端口的名称,并打印“Disconnected”。所以我猜测本机应用程序因某种原因终止。

该应用程序现在只是骨架,它只是sysout并读取sysin并且如果通过shell脚本直接启动它可以正常工作。

在调试webextension时,我无法进入对connectNative的调用,因为它只是逐步调用该调用而不是执行步骤。所以选择出错了。

如果有人能够创建基于FF webextension的本机消息传递应用程序以及我可能做错的任何指示,请告诉我。

谢谢

firefox-addon firefox-webextensions
1个回答
4
投票

此解决方案向您展示了如何检测onConnect和onFail。它应该可以帮助你找出真正的问题。

所以我认为你不能单独从JS方面使用connectNative进行适当的错误处理。如果你涉及exe方面,你可以做一些错误处理,但是当发生错误时你不能得到“错误原因”的字符串。该错误仅记录到控制台。

首先确保设置deeloper prefs,以便在浏览器控制台中显示消息。您可以使用此插件 - https://addons.mozilla.org/en-US/firefox/addon/devprefs/ - 或读取该插件描述,它为您提供了要设置的首选项的MDN页面。

这就是你可以做某种错误处理的方法(没有错误原因)(伪代码 - 我可能需要在callbcks中使用.bind):

function connectNative(aAppName, onConnect, onFail) {
    var listener = function(payload) {
        if (!connected) {
            connected = true;
            port.onDisconnect.removeListener(failedConnect);
            onConnect();
        } else {
            // process messages
        }
    }
    var failedConnect = function() {
        onFail('failed for unattainable reason - however see browser console as it got logged there');
    }
    var connected = false;
    var port = chrome.runtime.connectNative(aAppName);
    port.onMessage.addListener(listener);
    port.onDisconnect.addListener(failedConnect);
    return port;
}

现在在你的exe中,一旦它启动,就让它写入stdout的东西。这将触发onConnect

© www.soinside.com 2019 - 2024. All rights reserved.