2

В одном из фоновых файлов моего расширения chrome я проверяю файлы cookie и сталкивается с проблемой. В моей функции chrome.cookies.get({"url": domain, "name": name},function(cookie) {}); Я могу получить объект cookie и передать его в последний параметр (анонимную функцию) в качестве переменной cookie и получить доступ к его значению с помощью cookie.value.Не удается передать аргумент родительской функции дочерней анонимной функции

Проблема заключается в том, что я могу только отправить ответ возврата от родительской функции, а не вложенную анонимную функцию из вызова chrome.cookies.get.

В моем примере ниже я могу вернуть ответ (проверено с предупреждением на другой странице) с значению1 но 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

Хм. Как насчет форсирования 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"); 
    } 
    }); 
} 
+0

Я пробовал это раньше, и даже когда я добавил параметр var varResponse = arguments [1]; ', который вы предложили ** значение2 ** по-прежнему не возвращается через sendResponse. –

+0

См. Редактирование. Я забыл, что метод, вызывающий обратный вызов, не будет знать о втором аргументе. Сделать его глобальным должно работать. Также вы попробовали его с удалением кода value1? – chiliNUT

+0

Я попробовал вашу обновленную версию и не получил ответа от sendResponse. Мне нравится ваша идея использовать глобальное; вы думаете, что это может что-то сделать, потому что это работает в ** фоновом скрипте ** моего расширения chrome? Я считаю, что это означает, что он работает в контексте самого моего расширения, а не страницы окна ... Кроме того, на самом деле выполняется проверка кода проверки. Я периодически комментировал строку отправки * value1 *. –

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 вызывается, нет?

+0

Я попробовал и не получил ответа от sendResponse. Я не знаю, почему было бы различие, определял ли я его в 'chrome.cookies.get' или выше. Но я думаю, что проблема может быть вызвана тем, что функция находится в вызове cookie; или это потому, что функция анонимна ... Как вы думаете, как-то заменить анонимную функцию нормальным, может работать? –

0

(я как раз собирался спросить об этом, но я нашел ваш вопрос)

просто сделать это:

chrome.cookies.get({"url":"https://...","name":"..."}, function(cookie){ 
    chrome.tabs.sendMessage(sender.tab.id, {"cookie": cookie.value}); 
    }); 

P.S. в следующий раз попробуйте добавить тег на ваши вопросы.

Смежные вопросы