2015-02-11 45 views
0

我正在使用以下代碼獲取使用Mozilla Addon SDK開發的Firefox Addon內的遠程文件的文件大小。從主腳本到內容的多條消息

main.js

// Import the page-mod API 
var pageMod = require("sdk/page-mod"); 
// Import the self API 
var self = require("sdk/self"); 


// Create a page mod 
pageMod.PageMod({ 
    include : "*.example.com", 
    contentScriptFile : [self.data.url("content.js"), self.data.url("jquery.min.js"), self.data.url("contentloaded.js")], 
    contentScriptWhen : "ready", 
    attachTo: ["top", "existing"], 
    onAttach : startListening, 
    contentScriptOptions : { 
     iconWait : self.data.url("wait.gif"), 
     iconFinished : self.data.url("done.png"), 
    } 
}); 

function startListening(worker) { 


    worker.port.on("GetSize", function (data) { 

     // Handle the message 
     let getReq = require("sdk/request").Request({ 
       url : data[0], 
       onComplete : function (response) { 
        reply = [response.headers["Content-Length"], data[1]]; 
        //console.log("Send linkID : " + reply[1]); 
        worker.port.emit('receiveSize', reply); 
       } 
      }).head(); 
    }); 


} 

這完美的作品,但在DisplaySize函數被調用多次相同請求。

content.js

function checkURL(url, linkID) { 

    data = [url, linkID]; 
    self.port.emit("GetSize", data); 
    self.port.on("receiveSize", DisplaySize); 
    console.log("Inside checkURL For linkID : " + linkID); //<--This displays only once for each request 

} 

function DisplaySize(data) { 


    console.log("Inside DisplaySize For linkID : " + data[1]); //<--But this thrice 

} 

缺少什麼我在這裏?

回答

1

每當您撥打port.on時,都會添加一個新的消息偵聽器。只調用一次。

function checkURL(url, linkID) { 
    data = [url, linkID]; 
    self.port.emit("GetSize", data); 
    console.log("Inside checkURL For linkID : " + linkID); 
} 

function DisplaySize(data) { 
    console.log("Inside DisplaySize For linkID : " + data[1]); 
} 
self.port.on("receiveSize", DisplaySize); 
+0

這解決了它,但是如果我導航到其他頁面(通過Ajax),以前的消息偵聽器仍然活動,導致相同的行爲。如何解決這個問題? – Stacked 2015-02-14 11:17:00

+0

nmaier對如何得到這個固定的任何建議? – Stacked 2015-02-25 04:05:01

相關問題