我已经写了一个Chrome扩展来清除浏览器地址栏中的TYPO3内容管理系统缓存。
现在我想添加一个可选的功能,在页面刷新时自动清除缓存。这意味着,当用户按下F5,CTRL+R,点击工具栏中的reload图标或点击上下文菜单中的"Reload“时,首先应该执行我的ajax脚本(以清除CMS缓存),然后,页面可能会重新加载。
有没有可能用Chrome API做到这一点?
我首先尝试了内容脚本中的window.onbeforeupdate事件-当页面重新加载时,也会在我关闭窗口或切换到另一个网站时触发。而且,我不能让浏览器在这里等待我的ajax请求。
起作用的是在document.onkeydown事件中用控制键检验键116 (F5)和82 (R)并使用event.preventDefault()。但这不会涵盖刷新高速缓存的另外两种可能的情况。
谢谢!
发布于 2012-11-21 18:26:45
我找到了一个解决方案。它并不真正符合我的要求,但它工作(甚至更好)。
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,这基本上只是重新加载。
它不能真正满足我的需求的原因是,它将总是在任何请求时触发,而不仅仅是在重新加载时触发。这意味着在我的条件下,我必须检查:
的类型扩展变量
现在,当我点击网站上的链接时,脚本也会被触发-但对于我的情况来说,这是很好的。
https://stackoverflow.com/questions/13472629
复制相似问题