简体   繁体   中英

How can I add a callback function to chrome extension api?

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);

Recommended

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM