2013-06-13 26 views
4

僅當數據大小未超過當前瀏覽器所支持的數據URI的最大大小時,我纔想將數據導出爲數據URI。我想下載的文件。在Javascript中獲取max Data-Uri大小

document.location.href= "data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,"+data 

這有時會導致瀏覽器錯誤時,該文件是太大,但我希望錯誤可以在下載之前被獲取(拉昇例如其他方法)。

我怎樣才能在JS的最大數據URI的大小?

回答

7

我已經決定硬編碼此表:

下面是我用它來測試MAXSIZE腳本:

String.prototype.repeat = function(num) 
{ 
    return new Array(num + 1).join(this); 
} 

testDataURI=function(size) 
{ 
    window.open("data:text/plain,"+"a".repeat(size-16)) 
} 


testDataURI(100000) //test 100k characters 

JSFIDDLE

結果:

  1. 鉻(截至版本28):與2 097 152字節一起使用,wh ICH正好是2 MB
  2. 火狐(如版本26):與1 040 000字節,這可能是1 MB
+0

所以,作品是否意味着火狐( '爲版本26'(或者只有26?))遭受了很大的迴歸;考慮到以前的版本(至少ver> = 12)已知可以吞下至少2MB(或根據MDN https://developer.mozilla.org/en-US/docs/data_URIs#Common_problems)甚至可以獲得無限長度?和:http://stackoverflow.com/a/9957921/588079 – GitaarLAB

+0

我不知道。也許這是我的機器的限制(我無法解釋) – edi9999

1

什麼好老hardcode? :-)

我也可以想象一些js測試,因此它不可靠,並且至少需要一次服務器通信,可能不是很可靠,因爲它也可以根據瀏覽器實現以及服務器處理的可能性長時間的網址(但至少你知道你的服務器)。無論如何,它是這樣的:從你的服務器加載靜態html頁面(使用http頭將其永久緩存在客戶端,不會被請求參數改變)放入隱藏的iframe中,或者僅僅通過ajax獲取。例如,你知道目標網址(「data:application ...」)是3000個符號長度。比你建立相同長度的假網址到你的靜態html http://yourserver.com/test.html?param1=param1&param2=param2& ..並嘗試加載它。如果加載成功,則可以打開真實網址。

總之,我認爲,硬編碼也不是那麼壞在這種情況下。