当我的插件安装时,它需要提示用户获取用户名或类似的东西。之后它会存储它并且不应该再次询问。我将把这个提示放在哪里?install.rdf
? browser.xul
?
问问题
321 次
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
于 2012-05-19T00:30:52.480 回答