Search code examples
firefoxfirefox-addonportemit

Can't use "port.emit" on firefox add-on


I'm having some problems to use port.emit on my main.js code.

I've tried so many different ways to do this, but all them without sucess. This is my main code:

    // 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");

       }
    }


});

The port.on command is working. When it pass through the "port.emit", i receive this error in the command prompt:

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

I'm a beginner, this is my first addon and i know that this should be some simple question but i just can't solve this. Besides, there's not documentation in my language (Portuguese).


Solution

  • The problem is with the alert in the contentScriptFile. Comment out that alert and the problem will go away.

    In your own stack trace you can see it being mentioned here:

    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
    

    Note that I am also a beginner in firefox-addon development. If there is something wrong with my answer, please leave a comment and let me fix it.