Лучший тест для поддержки URI base64 (могу ли я создать большое изображение в кодировке base64 в JS?) - PullRequest
6 голосов
/ 13 июля 2011

Я использую Modernizr для определения функций, поддерживаемых в браузере, которые работают у наших пользователей, пока что все хорошо. Но я столкнулся с теоретической проблемой при тестировании на совместимость с base64. Патч для этой поддержки подробно описан здесь и работает - за исключением странного случая с IE8 - , он допускает только кодированные в base64 изображения размером до 32 КБ .

Я не хочу вставлять строку base64 длиной 32 КБ в мой файл JS, это добавит сумасшедшее количество раздувания. Итак, могу ли я создать 32-килобайтное изображение с использованием JS? Я думаю повторить какой-то шаблон внутри строки, пока он не достигнет 32 КБ в длину, такого рода вещи. Или, может быть, взять существующую крошечную строку (например, в патче Modernizr) и добавить ненужные данные в конце, которые все еще приводят к правильному изображению.

Я почти ничего не знаю о кодировке base64, кроме как манипулировать существующим образом. У кого-нибудь есть идеи?

1 Ответ

3 голосов
/ 13 июля 2011

Я думаю У меня есть ответ. Я пробовал всевозможные приемы (повторяющиеся фрагменты текста в источнике 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 и других. Хотелось бы услышать любые альтернативы.

...