【问题标题】:IE9 - DataURI to Binary - Polyfills for .atob, Uint8Array and ArrayBuffer - Array too large for polyfillIE9 - DataURI 到二进制 - .atob、Uint8Array 和 ArrayBuffer 的 Polyfills - 数组对于 polyfill 来说太大
【发布时间】:2014-12-18 21:09:00
【问题描述】:

我有以下实用程序:

        // Utility function to remove base64 URL prefix and store base64-encoded string in a    Uint8Array
        // Courtesy: https://gist.github.com/borismus/1032746
        function convertDataURIToBinary(dataURI) {
            var BASE64_MARKER = ';base64,';
            var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
            var base64 = dataURI.substring(base64Index);
            var raw = window.atob(base64);
            var rawLength = raw.length;
            var array = new Uint8Array(new ArrayBuffer(rawLength));

            for (i = 0; i < rawLength; i++) {
                array[i] = raw.charCodeAt(i);
            }
            return array;
        }

我是这样使用的:

        // Read the binary contents of the base 64 data URL into a Uint8Array
        // Append the contents of this array to the SP.FileCreationInformation
        var arr = convertDataURIToBinary(convertedDataURI);
        for (var i = 0; i < arr.length; ++i) {
            fileCreateInfo.get_content().append(arr[i]);
        }

准备文件上传。

为了让它在 IE9 中工作,我使用了以下 polyfill:

现在我在创建 Uint8Array 时遇到了一个非常有用的异常:

SCRIPT5022:抛出异常但未捕获

经过一些调试,我发现了问题:

if (obj.length > MAX_ARRAY_LENGTH) throw RangeError('Array too large for polyfill');

我的对象有一个length 1085798MAX_ARRAY_LENGTH 等于100000。我可以更改此值,但我想这是有原因的。

有人知道更好的方法吗?

【问题讨论】:

    标签: javascript binary internet-explorer-9 base64 polyfills


    【解决方案1】:

    嗯,我得到了答案。

    我只是设置了

    MAX_ARRAY_LENGTH = 2000000; //value that is higher than the expected array.length (may I should just remove the check)
    

    结果是,浏览器由于大数组而冻结,但在几(可能更多)秒后它解冻并完成上传。

    MAX_ARRAY_LENGTH 用于在使用时保持一定的速度。

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多