2012-11-20 70 views
1

我已经编写了一个Chrome扩展程序来清除TYPO3 CMS缓存,直接从浏览器的地址栏中删除。如何防止在Chrome扩展程序中重新加载页面?

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

有没有可能通过Chrome API来做到这一点?

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

什么是作品是检查document.onkeydown事件密钥116(F5)和82(R)与控制键和使用event.preventDefault()。但是这不会涵盖刷新缓存的其他两种可能情况。

谢谢!

+0

为什么不接受'onbeforeupdate'作为解决方案?恕我直言,如果窗口关闭或用户移动到另一个站点,缓存也将被清除并不重要。此外,你似乎没有必要等待Ajax响应。你的意思是说浏览器并没有提供足够的时间来发送Ajax请求吗?您是否将背景长轮询或Websockets连接视为保持缓存的实时标记?一旦连接断开,高速缓存可以清除。 – Stan

+0

嗯,我试过'onbeforeupdate',但是因为任何原因它没有被刷新,当刷新页面。不,我没有足够的时间来启动ajax请求,但重新加载页面并模拟清除缓存没有意义。清除缓存后必须重新加载。 – Armin

+0

哦,我认为有可能暂停页面刷新,直到服务器允许它发生,也就是在缓存被实际清除之后(如果我理解正确的话)。至少,这可以分两步进行,而不是一次(这意味着要自行刷新)。 – Stan

回答

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”
  • 一些变量属于我的分机

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

+0

是否可以阻止用户刷新Chrome扩展本身? –

+0

如果您的意思是“刷新扩展名”,以防止用户卸载/重新安装扩展:否这是不可能的。一旦安装了扩展程序,您就可以阻止与Google的链接。但扩展管理和webRequest API是两回事。 – Armin

+0

不,我的意思是刷新页面时,页面加载在'chrome-extension:// xyzid' –

相关问题