Web扩展拦截Web请求以联系本机消息传递以设置请求cookie的值

时间:2017-02-23 08:58:11

标签: javascript google-chrome-extension callback promise firefox-webextensions

我正在尝试拦截对特定网址的网络请求,在发送请求之前,请通过网络扩展本机消息(异步)联系本机应用。由于本机消息传递是异步的,因此在从本机消息传递响应获取cookie值之前发送Web请求。

以下是代码段。如何使此流程同步,以便加载cookie,然后发送截获的Web请求。

browser.webRequest.onBeforeRequest.addListener(
   loadCookie,
   {urls: ["https://some-url/*"]},
   ["blocking"]
);

function loadCookie(requestDetails)
{
    console.log("Gettting Cookie Data for"+requestDetails.url);
    var sending = browser.runtime.sendNativeMessage("native_app","getCookieData");
    sending.then(onSuccess, onError);
}

function onSuccess(response)
{
    console.log("Received: " + JSON.stringify(response));
    setCookie(response);
}

function onError(error)
{
    console.log("Error");
}

function setCookie(resp)
{
   if(typeof resp != 'undefined'){
   var now = new Date();
   var time = Math.round(now.getTime() / 1000);
   var expireTime = time + 15*60;
   browser.cookies.set({
    url: "https://some-domain/*",
    name: "req_cookie",
    value: resp,
    secure: true,
    expirationDate: expireTime
   });
   }
   console.log("Set a cookie");
}

1 个答案:

答案 0 :(得分:0)

为了设置Cookie标头,我认为您需要收听onBeforeSendHeaders,而不是onBeforeRequest

onBeforeSendHeaders(和onBeforeRequest)的文档说:

  

从Firefox 52开始,侦听器可以返回一个使用BlockingResponse解析的Promise,而不是返回BlockingResponse。这使侦听器能够异步处理请求。