Bootstrap插件创建带有任意js的选项按钮

时间:2014-07-14 03:15:34

标签: javascript firefox-addon options

我从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

1 个答案:

答案 0 :(得分:1)

您无法阻止加载项管理器打开模式对话框。但是,您可以轻松关闭它,只需将window.close()添加到您的命令中即可。假设您的代码在该模式对话框的上下文中运行 - 如果不是,那么Services.wm.getMostRecentWindow(null).close()应该这样做。

但是,我认为这里使用javascript:网址很尴尬,这种做法可能会在将来中断。您应该考虑使用包含JavaScript文件的最小XUL对话框(没有任何样式表,因此它也是不可见的)。然后,您将把代码放在正确的脚本文件中,而不是将其全部压缩到install.rdf中的一行。