如何知道面板我是否显示

时间:2012-11-16 08:52:26

标签: firefox firefox-addon-sdk

因此。我有一些问题,我的面板并不总是显示(虽然看起来附加的其余部分仍然有效)。我正在尝试写一些日志来找出发生这种情况的原因,但有一些我不太了解的事情。

为了实验我做了一个简单的插件

// main.js
const panels        = require("panel");
const {Cc, Ci}      = require("chrome");
const widgets       = require("widget");

var my_widget = widgets.Widget({
    id: "google-link",
    label: "Click me",
    contentURL: "http://google.com/favicon.ico",
    width: 20,
    height: 20,
    panel: my_panel,
    onClick: function() {
        my_panel.show();
        console.log('Panel displaying? ' + my_panel.isShowing);
    }
});

var my_panel = panels.Panel({
    width: 500,
    height: 500,
    contentURL: "http://google.com",
});

my_panel.port.on("show", function() {
    console.log('Panel emitted show');
});

首先是:isShowing总是false,即使我清楚地看到面板。并且show事件似乎永远不会被触发(我真的想要捕获error事件,但这只是为了首先找到事件。)

小字:这是使用SDK 1.6.1和Firefox 10ESR。也许这是在以后的版本中解决的问题,我不知道。无论哪种方式,我都想知道我是否在这里思考。

1 个答案:

答案 0 :(得分:1)

您的代码不太正确,请参阅此变体:

// main.js
const panels        = require("panel");
const {Cc, Ci}      = require("chrome");
const widgets       = require("widget");

var my_widget = widgets.Widget({
    id: "google-link",
    label: "Click me",
    contentURL: "http://google.com/favicon.ico",
    width: 20,
    height: 20,
    panel: my_panel,
    onClick: function() {
        my_panel.show();
        // this is false because the panel is shown asynchronously
        console.log('Panel displaying? ' + my_panel.isShowing);
    }
});

var my_panel = panels.Panel({
    width: 500,
    height: 500,
    contentURL: "http://google.com",
});

// there is no port property on panel
my_panel.on("show", function() {
    console.log('Panel emitted show');
    // this is true...
    console.log('Panel displaying? ' + my_panel.isShowing);
});

代码在这里:

https://builder.addons.mozilla.org/package/161691/latest/