javascript – 我可以将跨站点标记的数据作为blob获取吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 我可以将跨站点标记的数据作为blob获取吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2460字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 我可以将跨站点标记的数据作为blob获取吗?](/upload/InfoBanner/zyjiaocheng/699/e90430fc891146a286236e5d2aa48a2b.jpg)
我试图将一些链接到网页的图像保存到离线存储.我在Firefox上使用IndexedDB,在Chrome上使用FileSystem API.我的代码实际上是一个扩展,因此在Firefox上我运行在Greasemonkey上,在Chrome上运行作为内容脚本.我希望这是自动化的.
我在检索图像文件时遇到了问题.我正在使用标题为Storing images and files in IndexedDB的文章中的示例代码,但是我收到一个错误:我正在尝试下载的图像位于不同的子域中,并且XHR失败.
XMLHttpRequest cannot load http://...uxgk.JPG. Origin http://subdomain.domain.com is not allowed by Access-Control-Allow-Origin.
在Firefox上,我可以使用GM_xmlhttpRequest并且它可以工作(当我在同源URL时,代码适用于两个浏览器),但我仍然需要解决Chrome的问题,其中有其他限制(即,需要与主页上的框架交互)要求我将我的脚本合并到页面中并丧失我的权限.
所以回过头来,我试图想出一种方法来保存链接到(并可能出现在)页面的图像到IndexedDB和/或FileSystem API.我要么意识到如何解决Chrome中的跨源问题(如果它需要权限,那么我需要修复我与jQuery交互的方式)或某种逆转createObjectURL.在一天结束时我需要一个blob(文件对象,据我所知)放入IndexedDB(Firefox)或写入FileSystem API(Chrome)
帮忙,有人吗?
编辑:我的问题实际上可能归结为我如何以我想要的方式使用jQuery而不会丢失Chrome上的内容脚本权限.如果我这样做,I could use cross-origin XHRs on Chrome也是如此.虽然我宁愿得到一个不依赖于它的解决方案.特别是因为如果我将脚本合并到网页中,并且不要求它是内容脚本/用户脚本,我想要这个解决方案.
编辑:我意识到问题只是关于跨站点请求.现在,在@ chris-sobolewski,these questions和其他一些页面(如this)的帮助下,我有三种获取图像blob的方法之一,可以在this fiddle中看到.但是,所有这些都需要特殊权限.为了运行.唉,因为我在带有框架的页面上运行,因为a known defect in Chrome,我无法访问这些框架.所以我可以使用all_frames:true将脚本加载到每个帧中,但我真的想避免在每个帧加载时加载脚本.否则,according to this article,我需要逃离沙箱,但随后又恢复了特权.
解决方法:
由于您在Chrome和Firefox上运行,所以答案是幸运的,是的(有点).
function base64img(i){
var canvas = document.createElement('canvas');
canvas.width = i.width;
canvas.height = i.height;
var context = canvas.getContext("2d");
context.drawImage(i, 0, 0);
var blob = canvas.toDataURL("image/png");
return blob.replace(/^data:image\/(png|jpg);base64,/, "");
}
这将返回base64编码的图像.
从那里你只需要按照这些方式调用函数:
image = document.getElementById('foo')
imgBlob = base64img(image);
然后继续存储imgBlob.
编辑:由于文件大小是一个问题,您还可以将数据存储为canvasPixelArray,其大小为width * height * 4字节.
imageArray = context.getImageData( 0, 0 ,context.canvas.width,canvasContext.canvas.height );
然后JSONify数组并保存?
内容总结
以上是互联网集市为您收集整理的javascript – 我可以将跨站点标记的数据作为blob获取吗?全部内容,希望文章能够帮你解决javascript – 我可以将跨站点标记的数据作为blob获取吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。