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();
        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。也许这是在以后的版本中解决的问题,我不知道。无论哪种方式,我都想知道我是否在这里思考。

4

1 回答 1

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/

于 2012-11-17T08:03:54.560 回答