我已经在浏览器的地址栏中写了一个清除TYPO3 CMS缓存的Chrome扩展程序。
现在我想添加一个可选功能,以便在页面刷新时自动清除缓存。这意味着,当用户按下F5,CTRL + R时,单击工具栏中的重新加载图标或单击上下文菜单中的“重新加载”,首先应执行我的ajax脚本(清除CMS缓存),然后页面可能得到重新加载。
是否有可能使用Chrome API执行此操作?
我首先尝试了内容脚本中的window.onbeforeupdate
事件 - 这在页面重新加载时会被触发,但是如果我关闭窗口或切换到另一个网站也是如此。此外,我不能告诉浏览器在这里等待我的ajax请求。
使用控制键在document.onkeydown
事件中检查键116(F5)和82(R)并使用event.preventDefault()
。但这不会涵盖刷新缓存的其他两种可能情况。
谢谢!
答案 0 :(得分: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,这基本上只是重新加载。
它之所以不符合我的要求,是因为它会在任何请求时始终触发,而不仅仅是重新加载。这意味着在我的条件下我必须检查:
现在,当我点击网站上的链接时,也会触发脚本 - 但对于我的情况,这很好。