1

我在做类似的东西:如何访问请求头中onHeadersReceived事件Chrome扩展

chrome.webRequest.onBeforeSendHeaders.addListener(function (details) { 

    for (var i = 0; i < details.requestHeaders.length; ++i) 
    { 
     if (details.requestHeaders[i].name.toLowerCase() === 'user-agent') 
     { 
      message.useragent = details.requestHeaders[i].value; 
     } 
     else if (details.requestHeaders[i].name.toLowerCase() === 'referer') 
     { 
      message.referrer = details.requestHeaders[i].value; 
     } 
     else if (details.requestHeaders[i].name.toLowerCase() === 'cookie') 
     { 
      message.cookies = details.requestHeaders[i].value; 
      console.log(details.requestHeaders[i].value); 
     } 
    } 
    return { 
     requestHeaders: details.requestHeaders 
    }; 
}, { 
    urls: [ 
     '<all_urls>' 
    ], 
    types: [ 
     'main_frame', 
     'sub_frame', 
     'xmlhttprequest' 
    ] 
}, [ 
    'blocking', 
    'requestHeaders' 
]); 

and on receiving response: 

chrome.webRequest.onHeadersReceived.addListener(function (details) { 

    message.url = details.url; 
    // and some other details 
    ... 

但最近我发现,有时会要求存储的存储参数和响应参数属于不同的请求响应对。那么,是否可以在onHeadersReceived事件中访问请求头以防止不匹配。

+0

备注:由于您根本没有修改请求标头,我建议不要在您的webRequest事件中使用'blocking'。阻止事件减慢网络请求速度。 –

回答

3

您可以使用requestId字段来匹配保存在onBeforeSendHeaders中的标题与onHeadersReceived中的标题。

请求ID在浏览器会话中是唯一的。因此,它们可以用于将相同请求的不同事件联系起来。

+1

这将需要存储多个请求。我们不能在onHeaderReceived –

+0

@adnankamili中使用请求标识引用请求标头,没有内置的机制。 – rsanchez