获取Javascript中的最大数据Uri大小

获取Javascript中的最大数据Uri大小,javascript,data-uri,Javascript,Data Uri,我想将数据导出为数据URI,但前提是数据的大小不超过当前浏览器支持的数据URI的最大大小,并且该URI大于我要下载的文件 document.location.href= "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,"+data 当文件太大时,这有时会导致浏览器错误,但我希望可以在下载之前捕获错误(例如尝试其他方法) 如何获得JS中的最大数据URI大小?关于good ol

我想将数据导出为数据URI,但前提是数据的大小不超过当前浏览器支持的数据URI的最大大小,并且该URI大于我要下载的文件

document.location.href= "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,"+data
当文件太大时,这有时会导致浏览器错误,但我希望可以在下载之前捕获错误(例如尝试其他方法)

如何获得JS中的最大数据URI大小?

关于good old呢?:-)

我还可以想象一些js测试,因此它不可靠,至少需要一次服务器通信,而且可能不太可靠,因为它也可能因浏览器实现以及服务器处理长URL的可能性而有所不同(但至少您知道您的服务器是这样的)。不管怎么说,就是这样:将静态html页面从服务器加载到隐藏的iframe中,或者只使用ajax get加载到隐藏的iframe中(使用http头将其永久缓存在客户机上,不受请求参数的影响)。例如,您知道目标url(“数据:应用程序…”)的长度为3000个符号。然后在静态html中构建相同长度的假url。。并尝试加载它。如果加载成功,则可以打开真正的url


总而言之,我认为在这种情况下,硬编码并没有那么糟糕。

我决定对这个表进行硬编码:

下面是我用来测试maxsize的脚本:

String.prototype.repeat = function( num )
{
    return new Array( num + 1 ).join( this );
}

testDataURI=function(size) 
{
    window.open("data:text/plain,"+"a".repeat(size-16))
}


testDataURI(100000) //test 100k characters
结果:
  • Chrome(从第28版开始):使用2097152字节,正好是2MB
  • Firefox(从版本26开始):使用1040000字节,可能是1MB

  • 那么,这是否意味着Firefox(“从26版开始”(或者仅仅26版?)遭受了巨大的倒退;鉴于已知以前的版本(至少版本>=12)至少占用2MB(或者根据MDN,甚至无限长)?还有:我不太清楚。也许这是我的机器的一个缺陷(我无法解释)