Actually, I want to use webRequest to modify cookie before request sending. My own cookie data is stored in extension's storage, but getting data from storage is asynchronous. So how can I modify the request's cookie?
I want to do like this:
var beforeSendHeadersHandler = {
func: function(details, addCookie){
addCookie(details)
return {requestHeaders: details.requestHeaders}
},
filter: {
urls: ["<all_urls>"]
},
extra: ["blocking", "requestHeaders"]
};
chrome.webRequest.onBeforeSendHeaders.addListener(beforeSendHeadersHandler.func,
beforeSendHeadersHandler.filter,
beforeSendHeadersHandler.extra);
How can I add a callback argument to chrome.webRequest.onBeforeSendHeaders.addListener callback function, or any other solution?
If you do want to do that, use Promise
var beforeSendHeadersHandler = {
func: function(details, addCookie){
var promise = new Promise(function(resolve) {
chrome.storage.local.get("your key", function(results) {
resolve(results["your key"]);
});
};
promise.then(function(value) {
return {requestHeaders: value};
});
},
filter: {
urls: ["<all_urls>"]
},
extra: ["blocking", "requestHeaders"]
};
chrome.webRequest.onBeforeSendHeaders.addListener(beforeSendHeadersHandler.func,
beforeSendHeadersHandler.filter,
beforeSendHeadersHandler.extra);
See Synchronous call in Google Chrome extension and Asynchronous operation in blocking chrome.webRequest.onBeforeSendHeaders listener , it's recommended that if you could make a copy outside of the listener, or if possible, save the storage using localStorage , it is synchronous.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.