gpt4 book ai didi

javascript - 从主脚本到内容脚本的多条消息

转载 作者:行者123 更新时间:2023-12-03 10:49:59 26 4
gpt4 key购买 nike

我使用下面的代码来获取使用 Mozilla Addon SDK 开发的 Firefox Addon 内的远程文件的文件大小。

ma​​in.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

}

我在这里缺少什么?

最佳答案

每次调用 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);

关于javascript - 从主脚本到内容脚本的多条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28456543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com