【发布时间】:2012-05-18 17:51:29
【问题描述】:
当我的插件安装时,它需要提示用户获取用户名或类似的东西。之后它会存储它并且不应该再次询问。我将把这个提示放在哪里? install.rdf? browser.xul?
【问题讨论】:
标签: firefox firefox-addon installation
当我的插件安装时,它需要提示用户获取用户名或类似的东西。之后它会存储它并且不应该再次询问。我将把这个提示放在哪里? install.rdf? browser.xul?
【问题讨论】:
标签: firefox firefox-addon installation
在安装扩展程序时没有明确的运行代码机制 - 您应该在第一次运行扩展程序时执行此操作。最简单的方法是检查用户名是否已经设置。如果不是 - 显示提示。
不建议显示模态对话框,这对用户来说非常烦人,尤其是当它们在 Firefox 启动期间突然出现时。您应该改为在选项卡中打开您的页面。一个小麻烦:Firefox 在启动时可能正在恢复之前的会话。如果您过早打开页面,会话恢复机制可能会取代它。所以你应该等待sessionstore-windows-restored notification,这样的事情应该可以工作:
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);
最后一个复杂因素是您的代码可能是从浏览器窗口叠加层运行的——这意味着如果恢复的会话包含多个窗口,您的代码将会有多个实例。您可能希望上面的代码只运行一次,而不是在每个浏览器窗口中打开您的第一个运行页面。所以你必须以某种方式进行协调,也许是通过preferences。一个稍微复杂但更好的解决方案是在您的扩展中添加一个 JavaScript code module - 代码模块只加载一次,因此您不会在那里遇到协调问题。
【讨论】:
【讨论】: