2011-07-13 24 views
6

我使用Modernizr來檢測我們的用戶正在運行的瀏覽器支持的功能,到目前爲止這麼好。但是在測試base64兼容性時,我遇到了一個理論問題。此支持的修補程序詳細爲here,並且可以工作 - 除了IE8- it only allows base64 encoded images of up to 32KB的奇怪情況外。更好的測試base64 URI支持(我可以在JS中創建一個大的base64編碼圖像?)

我真的不想在我的JS文件中嵌入一個32KB長的base64字符串,它會增加一個瘋狂的膨脹量。那麼,我可以使用JS創建一個32KB有效的圖像嗎?我正在考慮在一個字符串內重複某種模式,直到它達到32KB的長度,這種事情。或者可能採用現有的細小字符串(如Modernizr補丁中的字符串),並在最後添加垃圾數據,仍然會產生有效的圖像。

除了如何操縱現有圖像,我幾乎不瞭解base64編碼。有沒有人有任何想法?

回答

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和其他。儘管如此,我很樂意聽到其他選擇。