Tweet
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
- Newer: iPod touchでnavitimeにアクセスできない
- Older: 記事のsummaryを書くのを止めました
Home > > ブラウザが落ちた時textareaの内容が消えちゃうのがショックなので、cookieに保存しておくという無謀な試み
Tweet
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Home > > ブラウザが落ちた時textareaの内容が消えちゃうのがショックなので、cookieに保存しておくという無謀な試み
Home > JavaScript > ブラウザが落ちた時textareaの内容が消えちゃうのがショックなので、cookieに保存しておくという無謀な試み
Tweet
自作JSエディタのテストがてらブログを書いてたら、
Firefoxが落ちた。(3になってからIE6レベルに落ちるようになって困ってます…)
当然textareaにしたためていたブログの内容は消えちゃうわけです。
これはショックということで対策を考えました。
1が出来ればいろんなサイトに使えてよさそうだけど、ハードル高いので今回は除外。
(Jetpackで作れるようになるとありがたいなー)
2は…トリッキーなのでやめときましょう。
まぁ3が妥当ですねー。じゃ、早速。
クッキーの最大サイズは4096バイトらしいので小さくしなくちゃいけません。
そこで、高度な JavaScript 技集からJSでzipできちゃうスーパーライブラリを拝借してきます。
var value = textarea.value;
var data = utf16to8(value);
data = zip_deflate(data);
data = base64encode(data);
とやれば、そこそこサイズを小さくできます。
ちなみに
var data2 = base64decode(data);
data2 = zip_inflate(data2);
data2 = utf8to16(data2);
で戻せます。
Cookieへの保存はjquery.cookie.jsで行います。
保存のタイミングはエディタのイベントと合わせてtextarea.onkeyupにします。
(onchangeはJSからの変更の時に発生しないので使ってない)
最後にこれが一番重要ですが、上記の通りcookieにはサイズ制限がありますので、
保存する前に長さをチェックし、(余裕を持たせて)4000バイトより大きければあきらめることにします。
これをまとめると以下のコードになります。
editor.keyup(function() {
var value = this.value;
var data = utf16to8(value);
data = zip_deflate(data);
data = base64encode(data);
var size = data.length;
if(size <= 4000) {
$.cookie('t', data, { 'expires': 1 });
}
$('#byte').val(size);
$('#byte2').val(document.cookie.length);
$('#cookie').val(document.cookie);
});
デモはこちらから。
textareaの内容をcookieに保存
以上、どう考えても実用には耐えないと思いますが…。
Home > JavaScript > ブラウザが落ちた時textareaの内容が消えちゃうのがショックなので、cookieに保存しておくという無謀な試み