2012-04-17 11 views
5

私はHTML5 Canvas要素を持っています。私は私のサーバーにキャンバスイメージを提出する必要があります。私が試したすべてのPCブラウザで正常に動作しますが、ログファイルにメモリ不足エラーが発生するとiOS Safariがクラッシュします。キャンバスイメージは950x323 PNGなので、ほぼ500 KBです。ここに私のサブミットコードの簡略版があります:iOS Safariが大きな投稿データフォームでクラッシュする投稿

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

サファリは提出を開始しますが、提出に数秒でクラッシュします。サーバーは要求で他のデータを取得しますが、imageDataは完全ではありません。私は "multipart/form-data"という形式のenctypeを変更しようとしましたが、それは助けになりませんでした。

答えて

1

キャンバスイメージを塊に分割するためにアルゴを書こうとしましたか?たとえば、キャンバス全体でtoDataURL()を呼び出すのではなく、キャンバスを10-20個の異なる部分に分割することができます。各作品を別々の画像として保存します。キャンバスを読み込むときは、キャンバスに各ピースを組み立てるだけです。これは、データパケットまたはビデオバッファリングと同様の概念です。

+0

こんにちはエリック、私はあなたのライブラリキネティックを使用しています!私は、標準のブラウザの代わりにAJAXを介して提出を提出しました。 Mac WebKitフォームの提出にバグがあります。しかし、イメージチャンクのアイデアをありがとう。 –

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(コードは表示されていません)を使用してフォーム送信後に適切なページにブラウザを誘導し、ちょっと標準的なフォーム送信をシミュレートしますが、それはユーザーにとって滑らかではありません。

関連する問題