基本上,我使用后台页面来监听事件,例如: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的寿命期满时,它似乎不会触发。
从我进行的调试会话中,仅在cookie的预期到期日期之后进行显式调用时才触发代码。
例如,如果我在预期的到期时间之后拨打了cookies.getAll()之类的电话,浏览器就会意识到Cookie已过期,然后才触发该事件。
我错过了什么吗?如果我滥用Cookie API或误解了其背后的机制,有人可以启发我吗?
任何帮助是极大的赞赏 !
最好的祝福,
对于罕见的操作,例如打开浏览器操作弹出窗口,您最好主动向cookie API查询相关cookie的最新状态,而不是通过侦听cookie的更改chrome.cookies.onChanged
,因为:
示例(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).
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句