javascript - 谷歌浏览器扩展:在 background.js 中获取 cookie 并将响应发送到 content.js
问题描述
我的扩展程序将通知添加到第三方网站。从这个通知中,我应该检查用户是否登录了我们的网站。我想从 background.js 中的 cookie 中检查 userId 并将消息发送到 content.js。我需要知道 cookie 是否为空( chrome.cookies.get 不能从 content.js 获得)。
https://developer.chrome.com/extensions/messaging的简单响应非常有效。并且 chrome.cookies.get 可以单独工作。但是当我尝试使用 get.cookies 添加条件时,出现了问题。我猜是因为 scoupe/context 或回调麻烦。
背景.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);
}
}
);
内容.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。有什么办法可以解决吗?
更新:更改了 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});
});
}
解决方案
推荐阅读
- marklogic - 以编程方式开始重新索引
- opengl - 如何在不使用 OpenGL 3.3 或更高版本的着色器的情况下将纹理绘制到屏幕上?
- xamarin.forms - Xamarin 绑定 ViewCell
- flutter - Flutter Facebook 登录错误:找不到吸气剂:“成功”。案例 FacebookLoginStatus.Success
- docker - 如何在 Heroku 中使用 Docker 调试意外的高内存使用?
- python - 在大写字母之间添加空格,但忽略 3 个字母的单词
- python - pynetdicom C_GET 失败,没有“CT 图像存储”的表示上下文已被 SCP 角色的对等方接受
- spring-security - 从查询参数动态设置注册 id
- c# - GameProgramming,原型模式:如何将泛型类从 C++ 转换为 C#?
- javascript - 从我的网站播放存储在 Google Cloud Storage 上的大型 .mp4 视频