Javascript 如何防止Firefox显示我的扩展名';启动时的侧边栏?
如果我自己的侧边栏在Firefox关闭时保持打开状态,则它会在启动时再次显示。我发现这是不可取的,宁愿它保持隐藏,直到手动打开。有可能阻止这种情况发生吗? 我尝试将这段代码添加到扩展的初始化函数中,以便在出现边栏时关闭边栏:Javascript 如何防止Firefox显示我的扩展名';启动时的侧边栏?,javascript,firefox,firefox-addon,sidebar,firefox-sidebar,Javascript,Firefox,Firefox Addon,Sidebar,Firefox Sidebar,如果我自己的侧边栏在Firefox关闭时保持打开状态,则它会在启动时再次显示。我发现这是不可取的,宁愿它保持隐藏,直到手动打开。有可能阻止这种情况发生吗? 我尝试将这段代码添加到扩展的初始化函数中,以便在出现边栏时关闭边栏: toggleSidebar("mySidebar", false); 这似乎没有太多的工作太一致-它似乎忽略了假参数,只是切换侧栏!当它工作正常时,它会产生不必要的副作用-我需要打开和关闭侧边栏一次,然后它才会显示任何内容。奇怪,但我认为Firefox对侧边栏可见性的部分
toggleSidebar("mySidebar", false);
这似乎没有太多的工作太一致-它似乎忽略了假参数,只是切换侧栏!当它工作正常时,它会产生不必要的副作用-我需要打开和关闭侧边栏一次,然后它才会显示任何内容。奇怪,但我认为Firefox对侧边栏可见性的部分看法已经不同步了
似乎其他人也有同样的问题。切换边栏(“mySidebar”,false)代码>不起作用,因为第二个参数表示“强制打开”,而不是打开/关闭标志
正如有人在Mozillazine上回答的那样,这是因为Firefox只是在会话之间保留边栏状态。你确定你需要与众不同吗
以下是Firefox中启动时打开侧栏的代码:
(稍后访问时,这些行可能会关闭-这是指向源代码最新版本的链接)
下面是sidebarcommand
属性持久化的地方:
我建议试试这个:
如果当前窗口是最后一个窗口,并且侧边栏打开
- 在浏览器关闭之前关闭侧边栏
- 欺骗BrowserShutdown以保持正确的属性(对应于“侧边栏未打开”的情况)
- 或者在BrowserShutdown之后,用您需要的值覆盖持久化的值
如果您提出了有效的解决方案,请与其他人分享,最好是在MDC上:您还可以在关机过程中添加一个观察者,并关闭侧栏。我和你有同样的问题,并最终走上了这条路线,因为我们已经设置了一个观察员来做一些其他清理工作
在初始化主覆盖期间,代码如下所示:
var current = this;
var quitObserver = {
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIObserver) || aIID.equals(Components.interfaces.nsISupports)) {
return this;
}
throw Components.results.NS_NOINTERFACE;
},
observe: function(aSubject,aTopic,aData ) {
var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser");
var sidebar = mainWindow.document.getElementById("sidebar");
if (sidebar.contentWindow.location.href == "chrome://daisy/content/sidebar.xul") {
mainWindow.toggleSidebar('openDaisySidebar', false);
}
}
};
setTimeout(function() {
var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser");
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(quitObserver,"quit-application-granted",false);
},2000);
希望这能有所帮助。有关如何在关机时关闭它以及万一在关机时关闭它的答案,请参阅。酷。我曾想过forceOpen标志不能打开/关闭,但这证实了这一点。假定传递错误不会对我造成伤害。我觉得我需要与众不同,因为我的侧边栏只有在URL栏中有一个有效的URL时才有意义。我想,在这种情况下,我可以只显示一个通用的侧边栏。我将尝试其中一些想法。谢谢,狡猾!我很难让它工作(尤其是由于关机时缺少调试!),但最终发现它适用于请求退出的应用程序。我发现,虽然我仍然可以得到窗口,但在退出应用程序时它没有文档。
1373 function BrowserShutdown()
...
1426 if (!enumerator.hasMoreElements()) {
1427 document.persist("sidebar-box", "sidebarcommand");
var current = this;
var quitObserver = {
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIObserver) || aIID.equals(Components.interfaces.nsISupports)) {
return this;
}
throw Components.results.NS_NOINTERFACE;
},
observe: function(aSubject,aTopic,aData ) {
var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser");
var sidebar = mainWindow.document.getElementById("sidebar");
if (sidebar.contentWindow.location.href == "chrome://daisy/content/sidebar.xul") {
mainWindow.toggleSidebar('openDaisySidebar', false);
}
}
};
setTimeout(function() {
var mainWindow = current._windowMediator.getMostRecentWindow("navigator:browser");
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(quitObserver,"quit-application-granted",false);
},2000);