Firefox插件:无法收听Firefox "退出-应用程序"事件
firefox addon: not able to listen firefox "quit-application" event
我有以下代码片段来启用firefox退出后的扩展,
observe: function (subject, topic, data) {
if (topic == "quit-application") {
LOG("inside quit-application Testing ");
var os = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
//os.addObserver(this, "http-on-examine-cached-response", false);
os.addObserver(this, "quit-application", false);
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
var tempappVersion = appInfo.version;
var appVersion = tempappVersion.split(".");
// adding add-on listener dsable event on add-on for FF4 and later versions.
if (appVersion[0] >= 4) {
setAddonEnableListener();
LOG("'napp-startup Testing from javascript file....");
}
return;
}
}
在setAddonEnableListener
中,我试图像这样启用扩展:
function setAddonEnableListener() {
try {
alert("setAddonEnableListener akbar nsListener called from ");
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("somename@extension.com", function(addon)
{
if (addon.userDisabled)
addon.userDisabled = false;
});
} catch (ex) {
}
}
我像这样注册quit-application
事件var
:
myModule = {
registerSelf: function (compMgr, fileSpec, location, type) {
var compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
compMgr.registerFactoryLocation(this.myCID,
this.myName,
this.myProgID,
fileSpec,
location,
type);
var catMgr = Components.classes["@mozilla.org/categorymanager;1"].getService(Components.interfaces.nsICategoryManager);
catMgr.addCategoryEntry("app-startup", this.myName, this.myProgID, true, true);
catMgr.addCategoryEntry("quit-application", this.myName, this.myProgID, true, true);
}
Firefox退出时,没有显示inside quit-application Testing
消息。我哪里做错了?
没有quit-application
类别。您应该收到app-startup
通知(或者从Firefox 4开始是profile-after-change
),并为quit-application
注册您的观察者:
observe: function (subject, topic, data) {
if (topic == "app-startup" || topic == "profile-after-change") {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(this, "quit-application", false);
}
else if (topic == "quit-application") {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(this, "quit-application");
...
}
}
引用文档:
除非另有说明,否则您可以使用nsIObserverService来注册主题。
并且在任何关机通知上都没有关于通过类别管理器注册的说明。
顺便说一句,我真诚地推荐XPCOMUtils用于组件注册。您不需要自己编写模块定义。
相关文章:
- 为什么这在IE中的工作方式与在Firefox中不同
- 铬:“;未捕获的语法错误:意外的标记:"
- JS可以在Chrome中工作,但不能在Firefox中工作
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- createElement("a") - FireFox JavaScript
- 为什么javascript:void(0)在Firefox中不起作用
- JavaScript异常:“;不成形”;在firefox浏览器上;XMLHttpRequest"chrome浏
- jQuery fadeIn fadeOut"眨眼;在Chrome上,在FireFox和IE上运行良好
- 在chrome上显示类似于关闭窗口时的firefox的警报消息.确认消息”;离开"或“;留在这个页面上&quo
- Chrome、Firefox转换“:"至“-"以及“_"分别显示在文件保存对话框中
- 块”;你想记住这个密码吗"firefox中的弹出窗口
- svg.js的奇怪行为;animate().move()"在Firefox中
- Firefox getComputedStyle返回"自动”;
- 休息请求以“0”结尾/"适用于chrome,而不是firefox
- “canvas.toDataURL(“图像/ png")“;在firefox中无法正常工作
- ActiveXObject(“WScript.Shell");在Firefox中未定义
- "事件未定义“;在firefox中
- Firefox扩展中的localStorage抛出“;操作不安全"例外