2015-10-26 63 views
1

我在使用port.emit的時候遇到了一些問題,在我的main.js代碼中。不能在Firefox上使用「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: 
    [email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/ 
modules/commonjs/sdk/content/worker-child.js:75:7 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre 
/modules/commonjs/sdk/event/core.js:112:9 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules 
/commonjs/sdk/event/core.js:89:38 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> reso 
urce://gre/modules/commonjs/sdk/remote/child.js:54:38 
[email protected]://gre/components/nsPrompter.js:370:5 
[email protected]://gre/components/nsPrompter.js:553:9 

[email protected]://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 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules 
/commonjs/sdk/loader/sandbox.js:66:12 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gr 
e/modules/commonjs/sdk/content/sandbox.js:313:9 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gr 
e/modules/commonjs/sdk/content/sandbox.js:275:1 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/ 
modules/commonjs/sdk/core/heritage.js:146:23 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/m 
odules/commonjs/sdk/content/worker-child.js:52:20 
[email protected]://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 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre 
/modules/commonjs/sdk/event/core.js:112:9 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules 
/commonjs/sdk/event/core.js:89:38 
[email protected]://gre/modules/commonjs/toolkit/loader.js -> reso 
urce://gre/modules/commonjs/sdk/remote/child.js:54:38 

我是初學者,這是我的第一個插件,我知道,這應該是一些簡單的問題,但我不能解決這個問題。 此外,我的語言(葡萄牙語)沒有文檔。

回答

0

問題出在contentScriptFile中的alert。註釋掉警報,問題就會消失。

在自己的堆棧跟蹤,你可以看到它在這裏被提及:

[email protected]://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中,插件開發初學者。如果我的回答有問題,請留下評論,讓我解決它。

+0

你說得對。 我不知道爲什麼這個警報是造成麻煩,因爲它被正確編寫。無論如何,我從代碼中刪除了它,現在它已經可以工作了。 謝謝! –