1

main.jsからパネルのコンテンツスクリプトにポート経由でメッセージを送信しようとしています。私は運が悪かったので多くのことを試しましたが、コンテンツスクリプトからmain.jsにメッセージを送信することは完全に機能します。

main.jsは次のようになります。

var data = require("self").data;
var setting = require("panel").Panel({
  width: 250,
  height: 130,
  contentURL: data.url("www.google.com"),
  contentScriptFile: data.url("script.js")
});
require("widget").Widget({
  id: "sorter1",
  label: "Search Result Sorting",
  contentURL: data.url("icon.ico"),
  panel: setting
});
setting.port.emit("message");

そして、これが私のコンテンツスクリプトです:

self.on("message", function(addonMessage) {
  document.innerHTML = "Got Message"
});
4

2 に答える 2

1

私は数日前にこれを理解しましたが、ここに投稿する時間がありませんでした。

パネルを使用する際に留意すべきいくつかの事項:

  • パネルページは、表示されているときではなく、拡張機能が読み込まれたときに読み込まれます。
  • パネルページのコンテンツスクリプトは、ページが表示されたときにパネルページに挿入されます(contentScriptWhenプロパティがデフォルトの場合)
  • コンテンツスクリプトは、アドオンSDKリソースにアクセスできません。

これが私がそれを実装した方法です

main.jsで

panel.on("show", function() {
     panel.port.emit("message");
});

パネルコンテンツスクリプト内

self.port.on("message", function() {
    //doThings
});

port.emit()は2番目の引数を必要としませんが、2番目の引数はコンテンツスクリプトに渡されるものです。

function(secondArg) {
}
于 2013-01-30T14:48:50.073 に答える
0

[更新]申し訳ありませんが、コードを完全に読んでいませんでした。

まず、実際にパネルにメッセージを送信する必要があります。

setting.port.emit('message', someData);

2番目の部分:私はあなたが欲しいと思います:

self.port.on("message", function(addonMessage) {
    document.innerHTML = "Got Message"
});

関連するドキュメントは次のとおりです。

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/content-scripts/using-port.html

于 2013-01-19T20:24:55.783 に答える