每個webRequest事件都會接收有關請求的信息,包括始發選項卡的ID。
因此,假設標籤存在注1,您可以使用以下流程:
// background.js
chrome.webRequest.onHeadersReceived.addListener(function(details) {
if (details.tabId == -1)
return; // Not related to any tab
chrome.tabs.sendMessage(details.tabId, {
responseHeaders: details.responseHeaders
});
}, {
urls: ['*://*/*'], // e.g. all http(s) URLs. See match patterns docs
// types: ['image'] // for example, defaults to **all** request types
}, ['responseHeaders']);
然後,在content script(declared in the manifest file),你把郵件,並將其傳遞給網頁:
// contentscript.js
chrome.runtime.onMessage.addListener(function(message) {
// Assuming that all messages from the background are meant for the page:
document.dispatchEvent(new CustomEvent('my-extension-event', {
detail: message
}));
});
這樣做之後,你的網頁可以只接收這些事件如下:
document.addEventListener('my-extension-event', function(event) {
var message = event.detail;
if (message.responseHeaders) {
// Do something with response headers
}
});
如果您想在上面放置抽象(例如,實現自定義EventEmitter),那麼你需要inject a script in the main execution environment,並在那裏聲明你的自定義API。
note 1。爲了簡單起見,我認爲該選項卡存在。實際上,對於type「main_frame」(和「sub_frame」),從來沒有這樣做,因爲該頁面尚未呈現。如果您想獲得頂級/框架文檔的響應標題,那麼您需要將響應標頭臨時存儲在背景頁面中的某些數據結構(例如隊列/字典)中,並且每當將數據發送到內容腳本時該腳本已準備就緒。
這可以通過在內容腳本中使用chrome.runtime.sendMessage
到背景頁面使用send a message來實現。然後,無論何時加載頁面並且內容腳本準備就緒,後臺頁面都可以使用sendResponse
來傳遞任何排隊的消息。
鉻。webRequest文檔表明您可以聽取onHeadersReceived事件。這不是你要求的嗎? – adrichman
請仔細閱讀我的問題。我想要一個可用於* general javascript世界的函數* – Merc
__general javascript world__是什麼?它甚至不是一個可以谷歌的短語。你能否提供你描述的真實世界的用例?許多關於你的問題的解釋都沒有提供明確的說明 – adrichman