webRequest.handlerBehaviorChanged()
此函数可用于确保在页面位于浏览器内存缓存中时事件侦听器正确应用。如果浏览器已加载页面,并且重新加载页面,浏览器可能会从其内存缓存中重新加载页面,在这种情况下,不会为请求触发事件。
假设扩展的工作是阻止针对某个模式的 Web 请求,并且发生以下场景
- 用户加载包含特定请求的页面,并且模式允许该请求。
- 资源被加载并缓存在内存中。
- 扩展的模式已更新,以至于不再允许该资源。
- 用户重新加载页面。
由于页面将从内存缓存中重新加载,因此侦听器可能不会再次被调用,并且请求将被加载,尽管扩展有新的策略。
handlerBehaviorChanged()
函数旨在解决此问题。它刷新内存缓存,以便页面重新加载将触发事件侦听器。
由于 handlerBehaviorChanged()
刷新缓存,因此它可能代价高昂且不利于性能。webRequest 模块定义了一个只读属性 MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES
:在 10 分钟内进行的调用次数超过此数量将无效。
缓存的实现,因此此函数的必要性,因浏览器而异,因此在某些浏览器中此函数不执行任何操作。
这是一个异步函数,它返回一个 Promise
。
语法
js
let flushingCache = browser.webRequest.handlerBehaviorChanged()
参数
无。
返回值
一个 Promise
,当操作完成后,它将以不带任何参数的方式完成。
浏览器兼容性
BCD 表格仅在浏览器中加载
示例
在以下代码段中,我们通过调用 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
。