1

main.js コードで port.emit を使用する際に問題が発生しています。

これを行うために非常に多くの異なる方法を試しましたが、すべて成功しませんでした。これは私のメインコードです:

    // main.js
var tabs = require("sdk/tabs"); //
//var data = require("sdk/self").data; //acrescenta a pasta data
var { ToggleButton } = require("sdk/ui/button/toggle");
var dadosCopiados=[];
var worker1; 
var worker2;
var self = require("sdk/self");


var button = ToggleButton({
  id: "copiadorDeDadosDeAcesso",
  label: "Copiador de Dados de Acesso",
  icon: {
    "16": "./icon-16.png",
    "32": "./icon-32.png",
    "64": "./icon-64.png"
  },
  onChange: function(state) {
      if(state.checked==true){
           worker1 = tabs.activeTab.attach({
                contentScriptFile: self.data.url("copiadorDeDados.js")
            });

        worker1.port.on("dadosDeAcesso", function processaDadosDeAcesso(dados) {
        console.log(dados[0]);
        console.log(dados[1]);
        //console.log(worker);
    });

      }
      else{

        worker2 = tabs.activeTab.attach({
           contentScriptFile: self.data.url("coladorDeDados.js")
        });

        worker2.port.emit("teste","my message");

       }
    }


});

port.on コマンドは機能しています。「port.emit」を通過すると、コマンド プロンプトに次のエラーが表示されます。

console.error:
JPM [error]   Message: TypeError: this.sandbox is undefined
  Stack:
    receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/content/worker-child.js:75:7
emitOnObject@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre
/modules/commonjs/sdk/event/core.js:112:9
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:89:38
processMessageReceived@resource://gre/modules/commonjs/toolkit/loader.js -> reso
urce://gre/modules/commonjs/sdk/remote/child.js:54:38
openModalWindow@resource://gre/components/nsPrompter.js:370:5
ModalPrompter.prototype.openPrompt@resource://gre/components/nsPrompter.js:553:9

ModalPrompter.prototype.alert@resource://gre/components/nsPrompter.js:605:9
@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/com
monjs/sdk/loader/sandbox.js -> resource://myaddon/data/coladorDeDados.js:2:1
load@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/loader/sandbox.js:66:12
importScripts@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gr
e/modules/commonjs/sdk/content/sandbox.js:313:9
WorkerSandbox@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gr
e/modules/commonjs/sdk/content/sandbox.js:275:1
constructor@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/core/heritage.js:146:23
initialize@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/m
odules/commonjs/sdk/content/worker-child.js:52:20
constructor@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/core/heritage.js:146:23
@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/com
monjs/sdk/content/worker-child.js:140:16
emitOnObject@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre
/modules/commonjs/sdk/event/core.js:112:9
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:89:38
processMessageReceived@resource://gre/modules/commonjs/toolkit/loader.js -> reso
urce://gre/modules/commonjs/sdk/remote/child.js:54:38

私は初心者です。これは私の最初のアドオンであり、これは簡単な質問であることはわかっていますが、これを解決できません。その上、私の言語 (ポルトガル語) のドキュメントはありません。

4

1 に答える 1

0

問題はalertcontentScriptFile にあります。そのアラートをコメントアウトすると、問題は解決します。

独自のスタック トレースでは、ここで言及されていることがわかります。

ModalPrompter.prototype.alert@resource://gre/components/nsPrompter.js:605:9
@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/com
monjs/sdk/loader/sandbox.js -> resource://myaddon/data/coladorDeDados.js:2:1

私はfirefox-addon開発の初心者でもあることに注意してください。私の答えに何か問題がある場合は、コメントを残して修正させてください。

于 2015-11-30T11:33:08.487 に答える