强制Ajax获取缓存版本
Forcing Ajax to get cached version
我正在创建一个Google Chrome扩展,我希望能够提取一些网站正在加载的图像,并将它们放入扩展中。在某些情况下,这可能会导致对服务器的大量请求,从而有效地降低服务器的速度。这些图像是在用户访问页面时加载的,因此扩展无需再次请求图像。有没有什么方法可以在不再次从服务器中提取数据的情况下获取数据?
使用二进制Ajax,可以将图像作为Blob
对象提取,FileReader
可以将其转换为base64 URL字符串。
-
获取图像的二进制数据作为
ArrayBuffer
并将其存储在Blob
:中var oReq = new XMLHttpRequest(); oReq.open("GET", "/myfile.png", true); oReq.responseType = "arraybuffer"; oReq.onload = function(oEvent) { var blob = new Blob([oReq.response], {type: "image/png"}); // step 2 goes here... }; oReq.send();
(根据规范,你也可以做
oReq.responseType = "blob"
,使oReq.response
立即成为Blob
,而不是ArrayBuffer
。我还不能100%确定这是否真的支持。) -
用
FileReader
:读取Blob
var fr = new FileReader(); fr.onload = function(e) { var dataUrl = e.target.result; // step 3 goes here... } fr.readAsDataURL(blob);
-
最后,您将URL存储在
dataUrl
中。将其直接分配给图像元素的src
属性:document.getElementById("myimg").src = dataUrl;
为了避免将来执行提取,请将数据URL存储在
localStorage
或IndexedDB存储中。
相关文章:
- 浏览器是否持久缓存脚本元素的编译版本
- Chrome没有加载最新版本的web工作程序脚本(运行缓存版本)
- 上载图像的新版本并避免缓存
- w3c验证器检查站点的缓存版本
- 使用 createJS 获取对容器缓存版本的引用
- Cordova应用程序自动同步/更新Web内容(.js文件),如果更新版本可用,否则使用缓存版本
- 调试时显示的较旧(可能是缓存的)版本的 javascript 文件
- 如何确保用户运行的是最新版本的应用程序,而不是缓存的版本
- Chrome后退按钮:仅提供初始页面的缓存版本,没有任何Ajaxed内容
- Javascript:检测是否缓存了请求的文件,如果存在较新版本,则删除缓存
- Microsoft Edge和IE上的Twitter Bootstrap Modal缓存(最新版本)
- 强制Ajax获取缓存版本
- 自动javascript版本控制,避免浏览器缓存清理
- 缓存清单忽略本地版本
- Javascript版本控制以避免缓存,这些实践的区别
- 缓存书签,但总是加载最新版本
- 控制Javascript文件的版本以防止不必要的缓存清理
- 浏览器缓存-版本文件-但如果浏览器使用旧版本怎么办?
- 随机版本号与图像强制缓存
- Chrome开发工具缓存旧版本的JavaScript文件