我正在创建Google-Chrome扩展程序,并且希望能够拉取网站正在加载的一些图像并将其放入扩展中。在某些情况下,这可能会导致对服务器的很多请求,从而有效减缓服务器的速度。这些图像在用户访问该页面时加载,因此扩展程序无需再次请求图像。有没有办法在不从服务器再次获取数据的情况下获取数据?强制Ajax获取缓存版本
1
A
回答
0
使用binary 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%确定它是否真的得到了支持。)阅读
Blob
与FileReader
:var fr = new FileReader(); fr.onload = function(e) { var dataUrl = e.target.result; // step 3 goes here... } fr.readAsDataURL(blob);
最后,您的网址存储在
dataUrl
。直接将其指定为图像元素的属性src
:document.getElementById("myimg").src = dataUrl;
为了避免执行在以后的获取,存储在
localStorage
数据URL或索引资料存储。
+0
不完全解决问题,我的扩展仍然需要加载图像。问题是原始网页(而不是我的代码)加载页面。然后,在页面加载后,我的扩展需要获取资源的缓存版本。如果我的分机必须从分机上多次加载资源,您的代码才会有帮助。 –
相关问题
- 1. 强制Ajax内容的页面缓存
- 2. 强制ajax调用来清除缓存
- 3. 防止Opera从缓存中取回页面Back按钮或强制缓存AJAX
- 4. 随机版本号与图像强制缓存
- 5. 如何强制浏览器刷新网页的缓存版本
- 6. 浏览器缓存:如果我们改变强制用户获取新版本,而不是本地缓存版本
- 7. 强制IE8缓存行为的脚本
- 8. Ajax缓存控制
- 9. HTML缓存版本
- 10. 强制非缓存gethostbyname()
- 11. 强制删除缓存
- 12. 强制CSS重新缓存
- 13. 强制HttpClient获取源代码的新版本
- 14. 强制firefox获取最新版本的silverlight应用程序
- 15. 如何强制nuget获取包的最新版本?
- 16. Delphi XE5 iOS TidHTTP.get获取旧版本的文件。缓存也许
- 17. 使用createJS获取对容器缓存版本的引用
- 18. 强制版本的ASP.NET MVC
- 19. 缓存控制响应头不强制浏览器缓存
- 20. AJAX请求的强制高速缓存更新
- 21. 多线程C++:强制从内存中读取,绕过缓存
- 22. 如何强制使用javascript和基本脚本加载缓存
- 23. HTML 5高速缓存清单获取缓存本身
- 24. ajax - 谷歌缓存版本不显示文字
- 25. 强制清除网站缓存
- 26. 强制重载/防止Web Workers缓存
- 27. Android Widget强制RemoteView清除缓存?
- 28. 重定向,强制浏览器缓存?
- 29. 在Glassfish中强制清除EJB3缓存
- 30. 如何强制Magento使用APC缓存
服务器没有发送适当的缓存标题,或者是什么问题? – Bergi
这不是我的服务器。我无法更改缓存标题。它看起来不像他们正在使用任何。 –
然后我想你应该尝试从你的扩展中覆盖/设置它们 – Bergi