6

我正在使用 Modernizr 来检测我们的用户正在运行的浏览器中支持的功能,到目前为止一切都很好。但是在测试 base64 兼容性时,我遇到了一个理论问题。此支持的补丁在此处进行了详细说明并且有效——除了 IE8 的一个奇怪案例——它只允许最大 32KB 的 base64 编码图像

我真的不想在我的 JS 文件中嵌入一个 32KB 长的 base64 字符串,它会增加大量的膨胀。那么,我可以使用 JS 创建一个 32KB 的有效图像吗?我正在考虑在字符串中重复某种模式,直到它达到 32KB 的长度,诸如此类。或者可能取一个现有的小字符串(如 Modernizr 补丁中的那个)并在末尾添加垃圾数据,这仍然会产生有效的图像。

除了如何操作现有图像之外,我对 base64 编码几乎一无所知。有没有人有任何想法?

4

1 回答 1

3

我有一个答案。我尝试了各种技术(我可以手动添加的 PNG 源代码中的重复文本块等),直到我发现添加换行符似乎可以完成这项工作:

    var b64test = new Image();
    b64test.onload = function() {
       alert("yay!")
    }

    b64test.onerror = function() {
       alert("boo")
    }

    /* A 1x1 GIF image */

    var base64str = "R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="
    while (base64str.length < 33000) {
        base64str = "\r\n" + base64str;
    }

    b64test.src= "data:image/gif;base64," + base64str;

在 IE8 中失败,在 IE9 和其他中工作。不过,我很想听听任何替代方案。

于 2011-07-13T19:18:15.087 回答