在我的Chrome扩展程序的一个后台文件中,我正在检查cookie并遇到问题。在我的函数chrome.cookies.get({"url": domain, "name": name},function(cookie) {});
中,我能够获取cookie对象并将其作为变量 cookie 传递给最后一个参数(匿名函数),并使用 cookie.value访问它的值
问题是我只能从父函数发送返回响应,而不能从chrome.cookies.get
调用中发送嵌套的匿名函数。
在下面的示例中,我可以使用 value1 返回响应(通过其他页面上的提醒验证),但 value2 永远不会被返回...很多阅读我认为我将问题缩小到范围错误...我的意思是我的响应调用 sendResponse (父函数中的参数)不被嵌套的匿名函数访问
function getCookies(request, sender, sendResponse, domain, name) {
chrome.cookies.get({"url": domain, "name": name}, function(cookie) {
sendResponse({"myvar":"value2"}); //DOES NOT WORK
if(cookie){
anotherFunction(cookie.value);
}else{
anotherFunction("0");
}
});
sendResponse({"myvar":"value1"}); // WORKS
}
所以基本上,我只需要弄清楚将 sendResponse 参数下推到匿名函数的方法;或者重新创建一个不会导致此范围问题的类似方法。对此问题的任何帮助或指导将不胜感激。提前感谢您的时间。
答案 0 :(得分:3)
在参考此问题Two way communication is returning error in Chrome Extension时,您是否在 onMessage 侦听器的末尾返回true?在我的案例中工作。
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
// your getCookies call
return true;
});
答案 1 :(得分:0)
嗯。如何强制sendResponse
加入Cookie?
function getCookies(request, sender, sendResponse, domain, name) {
Object.prototype.sendResponse=sendResponse;
chrome.cookies.get({"url": domain, "name": name}, function(cookie) {
cookie.sendResponse({"myvar":"value2"});
if(cookie){
anotherFunction(cookie.value);
}else{
anotherFunction("0");
}
});
}
答案 2 :(得分:0)
完全没有测试过,有没有理由你不能传入一个命名回调?:
function getCookies(request, sender, sendResponse, domain, name) {
var cb = function(cookie) {
sendResponse({"myvar":"value2"});
if(cookie){
anotherFunction(cookie.value);
}else{
anotherFunction("0");
}
};
chrome.cookies.get({"url": domain, "name": name}, cb);
sendResponse({"myvar":"value1"}); // WORKS
}
调用sendResponse
时, cb
仍应在范围内,不是吗?
答案 3 :(得分:0)
(我刚刚问起这件事,但我发现了你的问题)
这样做:
chrome.cookies.get({"url":"https://...","name":"..."}, function(cookie){
chrome.tabs.sendMessage(sender.tab.id, {"cookie": cookie.value});
});
P.S。下次尝试在您的问题中添加google-chrome-extension标记。