webRequest.handlerBehaviorChanged()

此函式可用於確保在頁面位於瀏覽器記憶體快取中時正確應用事件監聽器。如果瀏覽器載入了頁面,然後又重新載入,瀏覽器可能會從記憶體快取中重新載入頁面,在這種情況下,事件將不會為該請求觸發。

假設一個擴充套件程式的工作是根據特定模式阻止 Web 請求,並且發生了以下場景:

  • 使用者載入了一個包含特定請求的頁面,並且該模式允許該請求。
  • 資源被載入並快取在記憶體中。
  • 擴充套件程式的模式已更新,導致該資源不再被允許。
  • 使用者重新載入頁面。

由於頁面將從記憶體快取中重新載入,因此監聽器可能不會再次被呼叫,並且儘管擴充套件程式的新策略,請求仍將被載入。

handlerBehaviorChanged() 函式旨在解決此問題。它會重新整理記憶體快取,以便頁面重新載入能夠觸發事件監聽器。

由於 handlerBehaviorChanged() 會重新整理快取,因此它可能開銷很大,並且對效能不利。webRequest 模組定義了一個只讀屬性 MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES:在 10 分鐘內進行的呼叫次數超過此數字將不起作用。

快取的實現方式(因此需要此函式)因瀏覽器而異,因此在某些瀏覽器中此函式不起作用。

這是一個非同步函式,返回一個 Promise

語法

js
let flushingCache = browser.webRequest.handlerBehaviorChanged()

引數

無。

返回值

一個 Promise,在操作完成後將以無引數的形式完成。

示例

在以下程式碼片段中,我們透過呼叫 handlerBehaviorChanged() 來重新整理記憶體快取,並透過向控制檯記錄相應訊息來報告此操作。

js
function onFlushed() {
  console.log(`In-memory cache flushed`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

let flushingCache = browser.webRequest.handlerBehaviorChanged();
flushingCache.then(onFlushed, onError);

瀏覽器相容性

注意:此 API 基於 Chromium 的 chrome.webRequest API。本文件源自 Chromium 程式碼中的 web_request.json