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 () }
我正在尝试当用户在 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 () }