Firefox Addon:特定命令行上的事件

Firefox Addon : Event on a specific command line

我正在尝试当用户在 Web 控制台中输入命令时,我会在执行前在我的插件脚本中获取此命令?

例如,当用户输入命令行时"screenshot --fullpage"这个命令在执行之前被发送到我的插件脚本的一个函数。

我做了一些研究,但我只发现了一个关于打开 web 控制台的事件。

https://developer.mozilla.org/en-US/docs/Observer_Notifications#Developer_tools

此处发布了解决方案 - https://discourse.mozilla-community.org/t/firefox-addon-event-on-a-specific-command-line/6028/10?u=noitidart

好的,我们开始吧,这有效:

var { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});

var tmp = {};
Cu.import("resource://devtools/client/shared/DeveloperToolbar.jsm", tmp);

var gcliInit = require('devtools/shared/gcli/commands/index');
var { TargetFactory } = require("devtools/client/framework/target");

var a = new tmp.DeveloperToolbar(window, document.getElementById("developer-toolbar"));

var sysTarget= TargetFactory.forTab(a._chromeWindow.gBrowser.selectedTab);

gcliInit.getSystem(sysTarget).then(
    system => {
        console.log('system:',system);
        system.addItems([{
            name: 'greet',
            description: 'Show a greeting',
            params: [{
                name: 'name',
                type: 'string',
                description: 'The name to greet'
            }],
            returnType: 'string',
            exec: function(args, context) {
                return 'Hello, ' + args.name;
            }
        }]);
    },
    y => console.error('y:',y)
);

请注意,Firefox 45 中的路径发生了变化。因此此代码适用于 Fx45+,在此之前您将使用 resource://gre/modules/devtools/Loader.jsm 而不是 resource://devtools/shared/Loader.jsm

TargetFactor 是我缺少的关键组件,它很重要,它有这些方法:

 Object { forTab: function (), forRemoteTab: function (), forWorker: function (), isKnownTab: function () }