Dav*_*vid 9 javascript firefox xpcom firefox-addon
我一直在寻找不同的教程,我知道我很接近,但我在实现细节上迷失了,因为其中一些有点过时了,自Firefox 3以来有些事情发生了变化.我已经编写了javascript for firefox扩展,现在我需要将它变成一个XPCOM组件.
这是我需要的功能:我的Javascript文件很简单,我有两个功能startServer()和stopServer.我需要startServer()在浏览器启动时和stopServer()firefox退出时运行.
我用一个有效的解决方案更新了我的代码(感谢Neil).以下是MyExtension/components/myextension.js.
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
const CI = Components.interfaces, CC = Components.classes, CR = Components.results;
// class declaration
function MyExtension() {}
MyExtension.prototype = {
classDescription: "My Firefox Extension",
classID: Components.ID("{xxxx-xxxx-xxx-xxxxx}"),
contractID: "@example.com/MyExtension;1",
QueryInterface: XPCOMUtils.generateQI([CI.nsIObserver]),
// add to category manager
_xpcom_categories: [{
category: "profile-after-change"
}],
// start socket server
startServer: function () { /* socket initialization code */ },
// stop socket server
stopServer: function () { /* stop server */ },
observe: function(aSubject, aTopic, aData)
{
var obs = CC["@mozilla.org/observer-service;1"].getService(CI.nsIObserverService);
switch (aTopic)
{
case "quit-application":
this.stopServer();
obs.removeObserver(this, "quit-application");
break;
case "profile-after-change":
this.startServer();
obs.addObserver(this, "quit-application", false);
break;
default:
throw Components.Exception("Unknown topic: " + aTopic);
}
}
};
var components = [MyExtension];
function NSGetModule(compMgr, fileSpec) {
return XPCOMUtils.generateModule(components);
}
Run Code Online (Sandbox Code Playgroud)
据我所知,所有代码都进入了组件。
您需要一个JavaScript对象来表示您的组件,并向组件注册商注册。(它可以是一个新对象,也可以对一个现有对象进行多任务。)完成的方式取决于您以Firefox 3.x还是Firefox 4为目标。
您需要profile-after-change使用类别管理器注册通知。完成此操作的方式还取决于您是针对Firefox 3,Firefox 3.5 / 6还是Firefox 4。
当更改后的配置文件通知触发时,将创建您的组件并调用observe方法。在这里,您可以启动服务器并要求观察退出应用程序通知。请注意,这还调用了observe方法,因此它必须检查它收到的通知。
function myExt() {}
myExt.prototype = {
observe: function(aSubject, aTopic, aData) {
switch (aTopic) {
case "quit-application":
stopServer();
obs.removeObserver(this, "quit-application");
break;
case "profile-after-change":
startServer();
obs.addObserver(this, "quit-application", false);
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2286 次 |
| 最近记录: |