我从Bugzilla中发现,您可以将install.rdf中的选项url设置为任意js,它将运行得非常好。唯一的问题是窗口停用,就好像一个不可见的对话框已经打开它,无论你不能关闭它。
例如:
在我的插件中:简单的测试用例,在启动时它只是警告启动,在插件管理器中它将显示选项按钮,点击它将执行notifyObserver
但是它会进入所有对话框模式:
GitHub :: Noitidart / PortableTester
您可以使用GitHubExtensionInstaller addon
直接从repo安装此插件我的期权代码:
<em:optionsURL>
javascript:Components.utils.import('resource://gre/modules/Services.jsm');Services.obs.notifyObservers(window, 'hellothisisyourcaptainspeaking', 'options')
</em:optionsURL>
我想在点击选项按钮后重新进入这个不可见的对话框模式。或者,如果我们无法阻止它,我想在optionsurl中添加一些代码以退出此锁定模式。
在这个笔记中,我尝试了这段代码,但它不起作用:
javascript:
Components.utils.import('resource://gre/modules/Services.jsm');
Services.obs.notifyObservers(window, 'hellothisisyourcaptainspeaking', 'options');
var DOMWin = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebNavigation).QueryInterface(Components.interfaces.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindow);
var utils = DOMWin.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowUtils);
utils.leaveModalState();
这可以在此提交中看到:GitHub :: Noitdart / PortableTester commit showing trying to leave this dialog mode
答案 0 :(得分:1)
您无法阻止加载项管理器打开模式对话框。但是,您可以轻松关闭它,只需将window.close()
添加到您的命令中即可。假设您的代码在该模式对话框的上下文中运行 - 如果不是,那么Services.wm.getMostRecentWindow(null).close()
应该这样做。
但是,我认为这里使用javascript:
网址很尴尬,这种做法可能会在将来中断。您应该考虑使用包含JavaScript文件的最小XUL对话框(没有任何样式表,因此它也是不可见的)。然后,您将把代码放在正确的脚本文件中,而不是将其全部压缩到install.rdf
中的一行。