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イベントをキャッチしようとしていますが、これは最初にイベントを見つけるためだけです)。

細字:これはSDK1.6.1とFirefox10ESRを使用しています。おそらくこれは後のバージョンで解決されるものかもしれませんが、私にはわかりません。いずれにせよ、私がここで考えているかどうかを知りたいのです。

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 に答える