2011-07-13 20 views
6

Estoy usando Modernizr para detectar las funciones compatibles con el navegador que nuestros usuarios están ejecutando, hasta ahora todo bien. Pero me he encontrado con un problema teórico al probar la compatibilidad con base64. El parche para este soporte se detalla en here, y funciona, excepto en casos extraños con IE8- it only allows base64 encoded images of up to 32KB.Una mejor prueba para el soporte URI base64 (¿puedo crear una imagen codificada en base64 grande en JS?)

Realmente no quiero insertar una cadena base64 de 32KB de longitud dentro de mi archivo JS, se agregará una gran cantidad de hinchazón. Entonces, ¿podría crear una imagen válida de 32 KB usando JS? Estoy pensando en repetir algún tipo de patrón dentro de una cadena hasta que alcance 32 KB de longitud, ese tipo de cosas. O tal vez tomar una pequeña cadena existente (como la que está en el parche de Modernizr) y agregar datos no deseados al final que todavía da como resultado una imagen válida.

No sé casi nada sobre la codificación de base64, aparte de cómo manipular una imagen existente. ¿Alguien tiene alguna idea?

Respuesta

3

I think Tengo una respuesta. Probé todo tipo de técnicas (trozos de texto repetidas en la fuente PNG que podría añadir manualmente, etc) hasta que encontré que la adición de los saltos de línea aparece para hacer el trabajo:

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; 

falla en IE8, que funciona en IE9 y otros. Aunque me encantaría escuchar cualquier alternativa.

Cuestiones relacionadas