2012-04-17 96 views
5

我有一個HTML5 Canvas元素。我需要將畫布圖像提交給我的服務器。它可以在我嘗試過的所有PC瀏覽器中正常工作,但iOS Safari會在日誌文件中出現Out of Memory錯誤。畫布圖像幾乎是500 KB,因爲它是950x323 PNG。以下是我的提交代碼的簡化版本:iOS的Safari瀏覽器崩潰,大量發佈數據表單提交

$('#imageJSON').val(JSON.stringify(myCanvas)); //I wrote other JSON stringify code. It works 
var d = myCanvas.toDataURL(); 
$('#imageData').val(d); 
$('#myForm').submit(); 

Safari開始提交,但在提交中崩潰了幾秒鐘。服務器通過請求獲取其他數據,但imageData不完整。我嘗試將表單enctype更改爲「multipart/form-data」,但這沒有幫助。

回答

1

您是否試過編寫算法將畫布圖像分解爲塊?例如,不是在整個畫布上調用toDataURL(),而是將畫布分解成10到20個不同的部分。將每件作品保存爲獨立的圖像。當您加載畫布時,只需將每一塊組裝到畫布上。這與數據包或視頻緩衝類似。

+0

嗨Eric,我正在使用你的圖書館動力學!我最終通過AJAX提交,而不是標準的瀏覽器提交。 Mac WebKit表單提交中存在一個錯誤。儘管如此,感謝圖像塊的想法。 – 2012-05-02 17:36:48

3

事實證明,WebKit for Mac中存在內存錯誤。我將錯誤提交給webkit.org https://bugs.webkit.org/show_bug.cgi?id=84168。我發現一個替代解決方案是通過AJAX發送數據而不是標準的表單提交。

$('#imageJSON').val(JSON.stringify(myCanvas)); 
var d = myCanvas.toDataURL(); 
$('#imageData').val(d); 
var data = $(form).serialize(); 
$.post(ajaxurl, data, function(r) { 
    // done. handle response. remove loading overlay. 
}); 

工作很好,但它是一種痛苦。我使用javascript(代碼未顯示)在表單提交後將瀏覽器定向到適當的頁面,並且它模擬標準表單提交,但對用戶來說不夠流暢。