0

当我的插件安装时,它需要提示用户获取用户名或类似的东西。之后它会存储它并且不应该再次询问。我将把这个提示放在哪里?install.rdf? browser.xul?

4

2 回答 2

1

扩展安装时没有明确的运行代码机制 - 您应该在扩展第一次运行时简单地执行此操作。最简单的方法是检查用户名是否已经设置。如果不是 - 显示提示。

不建议显示模态对话框,这对用户来说非常烦人,尤其是当它们在 Firefox 启动期间突然出现时。您应该改为在选项卡中打开您的页面。一个小麻烦:Firefox 在启动时可能正在恢复之前的会话。如果您过早打开页面,会话恢复机制可能会取代它。所以你应该等待sessionstore-windows-restored通知,这样的事情应该可以工作:

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/Services.jsm");

var observer = {
  observe: function(subject, topic, data)
  {
    Services.obs.removeObserver("sessionstore-windows-restored", this);

    var browser = window.getBrowser();
    browser.loadOneTab("chrome://...", {inBackground: false});
  },
  QueryInterface: XPCOMUtils.generateQI([
    Components.interfaces.nsIObserver,
    Components.interfaces.nsISupportsWeakReference
  ])
};
Services.obs.addObserver("sessionstore-windows-restored", observer, true);

最后一个复杂情况是您的代码可能是从浏览器窗口覆盖层运行的——这意味着如果恢复的会话包含多个窗口,您的代码将会有多个实例。您可能希望上面的代码只运行一次,而不是在每个浏览器窗口中打开您的第一个运行页面。所以你必须以某种方式进行协调,也许是通过偏好。一个稍微复杂但更好的解决方案是在您的扩展程序中添加一个JavaScript 代码模块- 代码模块只加载一次,因此您不会在那里遇到协调问题。

于 2012-05-21T06:58:27.460 回答
0

尝试使用插件监听器https://developer.mozilla.org/en/Addons/Add-on_Manager/AddonListener#onInstalling%28%29

或使用首选项:https ://stackoverflow.com/a/958944/1360985

于 2012-05-19T00:30:52.480 回答