14

我正在 chrome 中开发一个扩展程序,并且每次用户在 Google 中搜索时我都尝试执行一个操作。目前我正在使用chrome.webRequest onBeforeRequest 监听器。它在大多数情况下都能正常工作,但有些请求是通过缓存完成的,不执行任何调用。我在有关缓存的 API 文档中找到了这一点:

Chrome 使用两个缓存——一个磁盘缓存和一个非常快的内存缓存。内存缓存的生命周期与渲染进程的生命周期相关联,渲染进程的生命周期大致对应于一个选项卡。从内存缓存响应的请求对 Web 请求 API 是不可见的。如果请求处理程序更改其行为(例如,根据哪些请求被阻止的行为),则简单的页面刷新可能不会考虑此更改的行为。要确保行为更改通过,请调用handlerBehaviorChanged()以刷新内存缓存。但不要经常这样做;刷新缓存是一项非常昂贵的操作。在注册或注销事件侦听器后,您无需调用handlerBehaviorChanged() 。

我尝试使用 handlerBehaviorChanged() 方法清空内存缓存,但没有区别。虽然不推荐我什至尝试在每次请求后调用它。

这是我的代码:

chrome.webRequest.MAX_HANDLER_BEHAVIOR_CHANGED_CALLS_PER_10_MINUTES = 1000;
chrome.webRequest.onBeforeRequest.addListener(function (details) {
    //perform action
    chrome.webRequest.handlerBehaviorChanged();
} {
    urls: ["*://*.google.com/*"]
});

有没有办法从扩展中清空/禁用这个内存缓存?

4

1 回答 1

1

假设“缓存”是由 Google 网站在对象、数组等中使用一些疯狂的 JavaScript 执行的,因此在内存缓存中清空浏览器将无济于事。

我的第一个想法是数据存储在 sessionStorage 中(因为这些值中有搜索词 [here I searched for test] 并且在每次请求/更改所选“搜索-单词”

在此处输入图像描述)

我尝试清除 Sessionstorage(甚至定期),但它并没有真正改变“未”加载,而且重新创建了存储,即使没有存储,也会显示不同的结果。

由于此信息以及我无法检查几 1000 行压缩 JavaScript 代码的事实,我只能假设该网站会缓存请求。我希望这些信息可以为您指明正确的方向。

于 2013-06-27T19:06:52.163 回答