Мое расширение добавляет уведомления сторонним веб-сайтам. Из этого уведомления я должен проверить, вошел ли пользователь на наш сайт. Я хочу проверить userId из файлов cookie в background.js и отправить сообщение на content.js. Где мне нужно знать, если куки не пустые (chrome.cookies.get недоступен из content.js).
Простой ответ от https://developer.chrome.com/extensions/messaging работает отлично. И chrome.cookies.get отлично работает сепареталы. Но когда я пытаюсь добавить условие с помощью get.cookies, возникает проблема. Я предполагаю это, потому что проблема scoupe / context или callbacks.
Background.js
Chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.greeting == "hello") {
var ID;
function getCookies(domain, name) {
chrome.cookies.get({"url": domain, "name": name}, function (cookie) {
ID = cookie.value;
showId();
});
}
function showId() {
if (ID) {
sendResponse({farewell: "logged"});
}
;
}
getCookies(baseUrl, COOKIE_KEY_USER_ID);
}
}
);
content.js
$(notify).find('[data-act]').on('click', function (e) {
e.preventDefault();
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
if (response && response.farewell == "logged") {
activateFromNotify();
} else {
// 'not logged'
$('.wrapper').html(showlogin);
};
});
});
Похоже, в background.js он не видит sendResponse внутри другой функции или Callback. Есть ли способ решить это?
Upd:
изменил конструкцию в background.js и все работает нормально:
browserObj.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello"){
checkUserLogin(request, sender, sendResponse);
};
return true;
});
function checkUserLogin(request, sender, sendResponse){
var resp = sendResponse;
browserObj.cookies.get({'url': baseUrl, 'name': COOKIE_KEY_USER_ID}, function (cookie) {
var userId = cookie && cookie.value ? cookie.value : 0;
resp({farewell: userId});
});
}