无法将父函数参数传递给子匿名函数

时间:2013-11-16 17:40:55

标签: javascript google-chrome-extension scope arguments anonymous-function

在我的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 参数下推到匿名函数的方法;或者重新创建一个不会导致此范围问题的类似方法。对此问题的任何帮助或指导将不胜感激。提前感谢您的时间。

4 个答案:

答案 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。下次尝试在您的问题中添加标记。