【发布时间】:2014-09-18 23:03:48
【问题描述】:
我正在开发一个谷歌插件/扩展,我遇到了一个问题,我只能推测它的原因。在我的 background.js 后台脚本中,我试图将图像数据发送到我的 content.js 内容脚本。
当我第一次在新标签中加载页面时,我只收到“已发送响应!”,但没有“收到响应”。然后我用 f5 键刷新,这一次我也收到了等待的“收到响应”消息。
有没有可能我的 background.js 根本不在内存中?如果是这样,我该如何解决?当我在 chrome://extensions/ 下重新加载插件并重新加载已经存在的选项卡时,也会发生这种情况。
background.js
chrome.extension.onMessage.addListener(
function(msg, sender, sendResponse) {
if((msg.action && (msg.action == "getPixels")) && msg.imgPath)
{
var canvas = document.createElement("canvas");
canvas.style.border = "none";
var img = new Image();
img.src = msg.imgPath;
var thewaitx = function()
{
if(img.complete && (img.width + img.height) > 0)
{
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext("2d").drawImage(img, 0, 0);
data = canvas.getContext("2d").getImageData(0, 0, img.width, img.height).data
sendResponse({value: data});
alert("response sent!");
}
else {setTimeout(thewaitx, 2000);}
};
thewaitx();
}
}
);
content.js
function findDataBySignature()
{
img = document.getElementsByClassName("someid")[0].getElementsByTagName("img")[0];
chrome.extension.sendMessage({action: "getPixels", imgPath:img.src}, function(response)
{
alert("response received");
data = response.value;
//blahblah
}
}
【问题讨论】:
-
这就是我迄今为止找到的所有答案的问题。我正在请求我的内容脚本(不是后台脚本!)中的数据。内容脚本运行,在某些时候它说嘿,伙计,后台脚本,这是 url,将图像数据发送给我。后台脚本获取消息并发送答案,但答案永远不会回来。我收到“已发送响应”的事实!是内容脚本已经运行的证明,因为它是唯一可以触发调用的脚本。嗯......现在当我想到这一点时,也必须加载 backg 脚本,因为我收到了“已发送响应!”。很奇怪。
-
我认为这与旧的内容脚本无关。我知道新代码只在新标签中执行。它通常是我正在更新的内容脚本。但这正是我所知道的。我重新加载扩展,然后我重新加载或打开一个新标签。还是我误解了什么?
-
啊!那么问题就错了。但是,再次回答。一会儿..
-
被提名重新开放。原来对同一问题的猜测是错误的。
标签: javascript google-chrome google-chrome-extension background message-passing