1

我已经编写了一个 Chrome 扩展程序来清除浏览器地址栏中的 TYPO3 CMS 缓存。

现在我想添加一个可选功能,在页面刷新时自动清除缓存。这意味着,当用户按 F5、CTRL+R、单击工具栏中的重新加载图标或单击上下文菜单中的“重新加载”时,首先应该执行我的 ajax 脚本(以清除 CMS 缓存),然后,页面可能重新加载。

有没有可能用 Chrome API 做到这一点?

我首先在内容脚本中尝试了该window.onbeforeupdate事件——这总是在页面重新加载时触发,而且如果我关闭窗口或切换到另一个网站也会触发。此外,我不能告诉浏览器在这里等待我的 ajax 请求。

有效的是使用控制键检查document.onkeydown键 116 (F5) 和 82 (R) 并使用event.preventDefault()。但这不会涵盖刷新缓存的另外两种可能的情况。

谢谢!

4

1 回答 1

1

我找到了解决方案。它并不真正符合我的要求,但它可以工作(甚至更好)。

Chrome 提供了一个webRequest API,允许您修改或阻止所有 http 请求。

chrome.webRequest.onBeforeRequest.addListener(
  function (details) {
    if (!severalConditionsToCheckIfIWantToDoTheMagic) {
        return;
    }

    $.ajax(url, {
        async:false,
        complete:function () {
          return {redirectUrl:details.url};
        }
    });
  },
  {urls:["<all_urls>"]},
  ["blocking"]
);

在此示例中,我首先检查是否要执行 ajax 请求。如果是,下一步就是不做 ajax 请求。重要的是,请求不是异步的。完成后,我返回请求的原始 url,这基本上只是重新加载。

它与我的要求不符的原因是它总是会在任何请求时触发,而不仅仅是在重新加载时触发。这意味着在我的情况下,我必须检查:

  • 其他网站
  • 其他请求类型(加载css、js或图片也是请求),我只需要类型'main_frame'
  • 属于我的扩展的一些变量

现在,当我单击网站上的链接时,也会触发该脚本 - 但就我而言,这很好。

于 2012-11-21T10:26:44.680 回答