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