Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Firefox附加sdk中同时显示2个sdk/面板?_Javascript_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Javascript 如何在Firefox附加sdk中同时显示2个sdk/面板?

Javascript 如何在Firefox附加sdk中同时显示2个sdk/面板?,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我知道如何使用位置:按钮显示。但是,当我尝试show()另一个面板时,上一个面板消失了。 我不想禁用自动隐藏。但我想同时展示两个面板 那么,我如何同时展示这两个呢 代码: 加载项SDK防止一次打开多个加载项: 你不能完全做你想做的事。sdk/panel API专门防止一次显示多个sdk/panel。这是在该概要文件中加载的所有基于附加sdk的扩展中一次打开一个sdk/面板。换句话说,如果其他基于SDK的扩展插件打开一个面板,您的面板将关闭。使用stock Add-on SDK代码无法禁用此功能。

我知道如何使用
位置:按钮
显示。但是,当我尝试
show()
另一个面板时,上一个面板消失了。 我不想禁用自动隐藏。但我想同时展示两个面板

那么,我如何同时展示这两个呢

代码:


加载项SDK防止一次打开多个加载项:
你不能完全做你想做的事。sdk/panel API专门防止一次显示多个sdk/panel。这是在该概要文件中加载的所有基于附加sdk的扩展中一次打开一个sdk/面板。换句话说,如果其他基于SDK的扩展插件打开一个面板,您的面板将关闭。使用stock Add-on SDK代码无法禁用此功能。这在(用法部分最后一段的部分)中有明确说明:

打开面板将关闭已打开的面板

为了更清楚地说明此限制适用于所有附加SDK扩展,我已将文本更新为:

打开面板将关闭已打开的panel()构造函数创建的任何面板,即使该面板是由基于SDK的其他插件扩展打开的

使用构造函数创建面板时,将通过调用私有函数将侦听器附加到面板。在某种程度上,这是[本段中的人与代码的永久链接,正如在编写此答案时一样:,.]:

正如您应该能够从代码中的注释中看出的那样,它是专门为防止您想要做的事情而设计的(一次显示多个sdk/面板)

显示内容的替代方法:
为了提供关于如何实现您对用户界面的期望的详细建议,我们需要更多关于您希望如何处理这两个方面的信息

鉴于您没有描述希望同时打开多个sdk/面板的原因,我不得不猜测。在将另一个sdk/面板用作的下拉面板时,您可能希望保持sdk/面板处于打开状态的一个原因是,您将第一个sdk/面板用作信息的半永久性显示或对话框。在这种情况下,您应该使用不同的UI方法来显示该信息。根据您希望用户界面的外观,有多种可能实现这一点。一种可能性是实施一项新的计划

另一种可能是使用(或)从打开对话框窗口。这些对话框窗口是完全独立的窗口,可以存在多久就存在多久。如果需要,可以将其样式设置为与sdk/面板的外观几乎相同。它与当前页面或窗口的紧密耦合程度取决于您所做的编程

附加SDK将SDK/面板实现为。Firefox中不限制一次显示多个XUL弹出窗口。您可以自己在Firefox主DOM中创建这些,而不是使用
Panel()
构造函数

还有其他可能性包括:将第一个sdk/面板作为主窗口UI的不同部分或作为内容页的一部分实现;或者,下拉式sdk/面板可以实现为实际的下拉菜单a,它可以是实际的菜单,也可以使用。如果确实需要,可以将其编码为与使用
Panel()
构造函数时完全相同的显示方式。然而,后一种可能性在插件SDK中存在,如果Firefox的底层结构发生变化,可能会导致您的插件需要更多的持续维护


关于如何实现您的UI在这里可能需要涵盖的内容,有太多的可能性。这种情况尤其如此,因为我们不知道您试图用UI实现的目标是什么。

可能重复“否”,我的意思是,我键入的代码只显示面板2,而不显示面板1,当我切换它时,它将切换,但我想同时显示它们time@the8472,这不是一个复制品。如果在两个面板上都设置了
noautohide=true
,则以下两种情况都会出现:A)一次只显示一个面板弹出窗口。即使您绕过SDK(即不使用
panel.show()
)并使用
panelxulement.openPopup()
打开其中一个或两个面板,这也是正确的。B) 如果在显示的面板外单击鼠标,则单独显示的面板都不会隐藏。是否需要使用PanelXulement.openPopup()?如果你想让某个特定的人知道你的评论,你需要在你的评论中加入他们的ID,前面加一个
@
。例如,对我来说,它将是
@Makyen
。如果您在评论中第一件事就是这样做,那么系统将提供那些已经对该答案/问题发表评论的人的自动完成建议。将始终通知您评论的答案/问题的原始海报。有更多信息。@Haxk20,我已更新此答案,以显示附加SDK API代码专门阻止您执行的操作。@Haxk20,我不确定您在面板中显示的困难是什么。
应该像其他HTML一样显示。我需要更多关于这个问题的信息。这最好作为单独的问题来处理。@Haxk20,我已经更新了这个答案和MDN上的文档,以明确对一个面板的限制是使用
panel()
构造函数为配置文件中安装的所有基于附加SDK的扩展创建的一个面板。如果另一个扩展插件打开
面板()
,面板将关闭。
function handleChange(state) {
    if (state.checked) {
        panelf.show({
            position: {
                bottom: 20
            }
        });
        panel.show({
            position: button
        });
    }
}
// Utility function takes `panel` instance and makes sure it will be
// automatically hidden as soon as other panel is shown.
var setupAutoHide = new function() {
  let refs = new WeakMap();

  return function setupAutoHide(panel) {
    // Create system event listener that reacts to any panel showing and
    // hides given `panel` if it's not the one being shown.