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