从主脚本到内容脚本的多条消息
Multiple messages from main script to contentscript
我正在使用下面的代码来获取正在使用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
}
我在这里错过了什么?
每次调用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);
相关文章:
- 选项卡侦听器未被来自后台脚本的消息激活
- 如何在弹出脚本到内容脚本之间发送消息并返回
- 在加载之前从内容脚本向加载项发出消息
- 我收到消息“资源解释为脚本,但使用 MIME 类型文本/html 传输”
- 将消息从控制器传递到视图中的 AJAX 脚本
- Chrome扩展程序,如何将消息从面板发送到内容脚本
- 为什么我的附加组件面板的内容脚本在更改 contentURL 后不再响应端口消息
- JS脚本未按预期工作,没有错误消息
- chrome广播消息到内容脚本
- 是否可以使用chrome.tabs.sendmessage从内容脚本向背景页发送消息
- 使用chrome扩展,如何使用长寿命连接(端口)将消息从后台脚本传递到内容脚本
- 如何筛选重复消息的SSE脚本
- 从主脚本到内容脚本的多条消息
- 阻止“停止执行此脚本”消息
- asp.net 中的脚本消息框
- 面板&在Firefox扩展中传递的PageMod内容脚本消息
- 未调用内容脚本消息处理程序
- 使用内容脚本/消息与Chrome应用程序(不是扩展)发送数据
- HTML表单正在重新加载,java脚本消息没有显示
- 停止运行这个脚本?"消息,当用户单击我的HTML选择元素时出现