我正在尝试拦截对特定网址的网络请求,在发送请求之前,请通过网络扩展本机消息(异步)联系本机应用。由于本机消息传递是异步的,因此在从本机消息传递响应获取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");
}
答案 0 :(得分:0)
为了设置Cookie标头,我认为您需要收听onBeforeSendHeaders,而不是onBeforeRequest。
onBeforeSendHeaders
(和onBeforeRequest
)的文档说:
从Firefox 52开始,侦听器可以返回一个使用BlockingResponse解析的Promise,而不是返回BlockingResponse。这使侦听器能够异步处理请求。