首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Chrome扩展中防止页面重载?

如何在Chrome扩展中防止页面重载?
EN

Stack Overflow用户
提问于 2012-11-20 19:52:18
回答 1查看 2.7K关注 0票数 1

我已经写了一个Chrome扩展来清除浏览器地址栏中的TYPO3内容管理系统缓存。

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

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

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

起作用的是在document.onkeydown事件中用控制键检验键116 (F5)和82 (R)并使用event.preventDefault()。但这不会涵盖刷新高速缓存的另外两种可能的情况。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 18:26:45

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

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

代码语言:javascript
复制
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,这基本上只是重新加载。

它不能真正满足我的需求的原因是,它将总是在任何请求时触发,而不仅仅是在重新加载时触发。这意味着在我的条件下,我必须检查:

  • Other websites
  • Other request types (加载css、js或图片也是请求),我只需要属于我的extension

的类型扩展变量

现在,当我点击网站上的链接时,脚本也会被触发-但对于我的情况来说,这是很好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13472629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档