2012-07-16 105 views
1

恐怕我還沒有想通過port腳本之間的通信如何工作。 在panel.js之內我聽着在面板中按下一個提交按鈕。我保存值數組vals,並通過他們:如何從內容腳本1獲取數據以將附加腳本添加到內容腳本2?

self.port.emit("submitted", vals); 

監聽main.js有:

panel.port.on("submitted", function(vals) { ... }); 

,現在我想送vals到另一個內容的腳本(「page.js」)它將使用這些數據來操縱網站的DOM。

在main.js我想:

require("page-mod").PageMod({ 
    include: "*", 
    contentScriptWhen: 'end', 
    contentScriptFile: data.url("page.js"), 
    onAttach: function(worker) { 
     panel.on('submitted', function(vals) { 
      worker.port.emit('output', vals); 
     }); 
    } 
}); 

回答

1

一般情況下,你正在嘗試看起來像它的工作 - 只是你可能希望通過panel.port.on更換panel.on。但是,工作人員可以來來去去,你不想試圖與那些不在那裏的人溝通。該documentation有一個很好的例子,允許跟蹤活動的職工,可以略作調整,爲您的目的:

var workers = []; 

var pageMod = require("page-mod").PageMod({ 
    include: '*', 
    contentScriptWhen: 'end', 
    contentScriptFile: data.url('page.js'), 
    onAttach: function(worker) { 
    // Add new worker to the list 
    workers.push(worker); 
    worker.on('detach', function() { 
     // Remove no longer active worker from the list 
     var index = workers.indexOf(worker); 
     if (index >= 0) 
     workers.splice(index, 1); 
    }); 
    } 
}); 

panel.port.on('submitted', function(vals) { 
    for (var i = 0; i < workers.length; i++) 
    workers[i].port.emit('output', vals); 
}); 
+0

非常感謝弗拉基米爾:) – user1521685 2012-07-17 13:50:36

相關問題