gpt4 book ai didi

javascript - Chrome 扩展程序的持久性 cookie 没有正确过期?

转载 作者:搜寻专家 更新时间:2023-11-01 04:36:33 28 4
gpt4 key购买 nike

总结:

基本上,我使用后台页面来监听事件,例如:onStartup、onInstalled 和 cookies.onChanged 来决定在单击 browserAction 时应向用户显示哪个页面。我的问题是关于后者及其触发方式。


代码示例:

chrome.cookies.onChanged.addListener(function(info){
if(info.cookie.name === "dummycookie"){
/* Possibilities of info.cause (as described in the docs):
* evicted
* expired
* explicit (it's used when setting or removing a cookie)
* expired_overwrite
* overwrite
*/
if(info.cause == "overwrite" || (info.cause == "explicit" && !info.removed)){
// Cookie was set (explicit or overwrite)
chrome.browserAction.setPopup({ popup: "dummy1.html" });
}
else{
// Cookie was removed (evicted, expired or expired_overwrite)
chrome.browserAction.setPopup({ popup: "dummy2.html" });
}
}
});

问题是,虽然上面的代码可以很好地处理显式调用(cookies.set 和 cookies.get),但它似乎不会在 cookie 生命周期到期时触发。

根据我进行的调试 session ,只有在 cookie 的预期到期日期之后进行显式调用时才会触发代码。

例如如果我在假定的过期时间后调用 cookies.getAll() 之类的调用,浏览器就会意识到 cookie 已过期,然后才会触发事件。

我错过了什么吗?如果我滥用了 cookies API 或者我误解了它背后的机制,谁能告诉我吗?

非常感谢任何帮助!

最好的问候,

最佳答案

对于罕见的操作,例如打开 browser action popup ,你最好积极一点query用于相关 cookie 最新状态的 cookie API,而不是通过 chrome.cookies.onChanged 监听 cookie 更改,因为:

  1. 如果您观察到的错误是真实的,那么这将解决它。
  2. 由于弹出窗口不经常打开,因此让后台/事件页面保持事件状态只是为了获得 cookie 更改通知,这是一种资源浪费,尤其是考虑到此答案中提供的替代方法。

示例(popup.js,需要 activeTab 和 cookie 权限):

// Example: Get the value of the _gaq cookie for the top-level frame of the
// current tab.
chrome.tabs.query({
active: true,
currentWindow: true
}, function(tabs) {
// Need activeTab permission to read url, e.g. http://example.com/home
var url = tabs[0].url;
chrome.cookies.get({
url: url,
name: '_gaq'
}, function(cookie) {
// TODO: Do something with cookie, e.g. by updating the view (via DOM).
});
});

关于javascript - Chrome 扩展程序的持久性 cookie 没有正确过期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906943/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com