通过webextension

时间:2016-10-14 10:38:22

标签: firefox-addon firefox-webextensions

为firefox(目前使用Nightly 52)创建了一个webextension,它使用本机消息传递在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创建本机消息传递应用程序以及我可能做错的任何指示,请告诉我。

由于

1 个答案:

答案 0 :(得分: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

相关问题