2013-01-15 22 views
9

我嘗試創建一個Blob對象並將Uint8Array傳遞給它的構造函數 它在窗口上的chrome和firefox上正常工作 在ios上的chrome和safari上,但是Blod不包含Uint8Array,但文本:[對象Uint8Array]blob不接受ios上的Uint8Array

我需要這上傳畫布到服務器。

是否有解決方法?

+0

聽起來像那個方法需要字符串參數,但你傳遞一個對象,所以它的toString()方法被調用,在JS中,返回類似於你的問題來表示對象。 – marekful

+0

我不這麼認爲。它在Windows PC上正常工作,如果我傳遞一個正常的數組。它工作正常。 –

回答

11

我正在努力解決完全相同的問題。當我使用ArrayBuffer備份Uint8Array時,它在Safari和Chrome中都能正常工作(尚未在其他瀏覽器中測試過),但Chrome會打印警告消息。 Chrome說我必須在將DataBuffer傳遞給Blob()構造函數之前將它包裝在DataView中。

// write the bytes of the string to an ArrayBuffer 
var ab = new ArrayBuffer(byteString.length); 
var ia = new Uint8Array(ab); 
for (var i = 0; i < byteString.length; i++) { 
    ia[i] = byteString.charCodeAt(i); 
} 

new Blob([ab], {type: mimeString}); 

編輯

確切鉻棄用消息爲:

ArrayBuffer值在斑點構造棄用。改爲使用 ArrayBufferView。

+0

不幸的是,這似乎並沒有幫助Safari 6.0.3(7536.28.10)。 – mtyaka

+5

這幫助我找到了解決我的問題的方法:對於Uint8Array'u',我將'u.buffer'傳遞給Blob構造函數而不是'u'本身。 – jtbandes

+0

謝謝@jtbandes爲我解決了這個問題!我在桌子上撞了我的頭幾個小時:) –