2011-07-13 17 views
6

Tôi đang sử dụng Modernizr để phát hiện các tính năng được hỗ trợ trong trình duyệt mà người dùng của chúng tôi đang chạy, cho đến nay rất tốt. Nhưng tôi đã đưa ra một vấn đề lý thuyết khi kiểm tra khả năng tương thích base64. Bản vá cho hỗ trợ này chi tiết here và hoạt động- ngoại trừ trường hợp lạ với IE8- it only allows base64 encoded images of up to 32KB.Một thử nghiệm tốt hơn cho hỗ trợ URI base64 (tôi có thể tạo hình ảnh mã hóa base64 lớn trong JS không?)

Tôi không thực sự muốn nhúng chuỗi base64 dài 32KB vào tệp JS của mình, nó sẽ thêm một số lượng bloat dữ dội. Vậy, tôi có thể tạo hình ảnh 32KB hợp lệ bằng JS không? Tôi đang suy nghĩ lặp lại một số loại hình trong một chuỗi cho đến khi nó đạt đến 32KB chiều dài, đó là loại điều. Hoặc có thể lấy một chuỗi nhỏ xíu (giống như trong bản vá Modernizr) và thêm dữ liệu rác vào cuối mà vẫn cho ra một hình ảnh hợp lệ.

Tôi biết bên cạnh không có gì về mã hóa base64, ngoài cách thao tác một hình ảnh hiện có. Có ai có ý tưởng nào?

Trả lời

3

I nghĩ Tôi có câu trả lời. Tôi đã thử tất cả các loại kỹ thuật (khối văn bản lặp đi lặp lại trong nguồn PNG mà tôi tự có thể thêm, vv) cho đến khi tôi phát hiện ra rằng việc thêm các dấu ngắt dòng dường như thực hiện công việc:

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; 

Thất bại trong IE8, làm việc trong IE9 và khác. Tôi rất muốn nghe bất kỳ lựa chọn thay thế, mặc dù.

Các vấn đề liên quan