function getCookie(name) {
var i, k, j, q, w, x, cookies, value;
cookies = document.cookie.split("; ");
for (i = 0; i < cookies.length; i++) {
value = cookies[i].split("=");
if (value[0] == name) { //Out of memory at line: 374 ←ここ
return decodeURIComponent(value[1]);
}
}
memoret = getCookie("check");
memoret2 = memoret.split(",");
j=memoret2.length;
var choise=document.getElementsByName('choise');
for(k=0;k<j;k++){
choise[k].value = memoret2[k];
choise[k].value.selected = true;
}
memoret3 = getCookie("check2");
memoret4 = memoret3.split(",");
q=memoret4.length;
for(w=0;w<q;w++){
x = memoret4[w];
document.form.q1[x].checked=true;
}
var year = getCookie("year");
var month = getCookie("month");
var day = getCookie("day");
document.form.y[year].selected=true;
document.form.m[month-1].selected=true;
document.form.d[day-1].selected=true;
return null;
}
コメント(6件)
function setCookie(name, value, expires, domain, path, secure) {
var cookieStr = name + "=" + encodeURIComponent(value);
cookieStr += expires ? " ;expires=" + expires.toGMTString() : "";
cookieStr += domain ? " ;domain=" + domain : "";
cookieStr += path ? " ;path=" + path : "";
cookieStr += secure ? " ;secure" : "";
document.cookie = cookieStr;
}
expires = new Date();
expires.setDate(expires.getDate() + 20);
setCookie("check", ret, expires);
setCookie("check2", ret2, expires);
setCookie("year", document.form.y.value, expires);
setCookie("month", document.form.m.value, expires);
setCookie("day", document.form.d.value, expires);
}
- Cookie の値として 20 個以上保存する事になった可能性はありますか?
(例えば現在は name だったものの、開発中は name_1 であり、それが残っているなど)
- Cookie のサイズ上限 (4096 byte) に達している可能性はありますか?
サイズ上限に達していれば、後の 3 つ (year, month, day) が保存されなくても不思議ではありません。
ツールバーやflashなどのプラグインとの相性トラブルあたりだと思うんだけど、
スクリプト自体もクロスブラウザをあまり考慮してないように感じるし・・・、
正常に動作する環境と非正常な環境を比較してみないと正直判んない。
以前は大変お世話になりました。
Out of memory がそのページに1番最初にアクセスしたときには出ているんですが、
2度目?からは、Out of memoryが出ないで普通に動作するんです。
なので放置していたんですが、
(year, month, day) が保持されない人がいるということで、
違うPCから試していたら、やはり最初はOut of memoryが出るんですよね・・
Reiaruさん、コメントをありがとうございます。
私の環境で、IEとFirefoxでは正常に保持されています。
ただ何人かのユーザから日付が保持されないとメールをいただいているんです。
メールは設置している「不都合を送信する」という一方的なフォームからなので、
ユーザの環境がわからないままなのです。
クッキーは20個以上は保存していません。
かなりの量ですが、くっつけて保存し、splitで戻しています。
(name)についても、見直してみます。
サイズ上限 (4096 byte)は、気にしたことがなかったのですが、
どうやって確認するのでしょう?
自分でもいまから調べてみます。
実際の Cookie には他のデータ (例えば期限など) も書き込まれる訳でして、
私自身はその辺りがどうなのかはよく知らなかったりもします。
Cookie は使い方によってはとても便利ですが、そういう制限があるので POST でどうこうしたりする様にしています。
私が書いた事はあくまでも「可能性を一つ一つ潰す」という事でして、
実際のところそれで Out of memory などというエラーにはならないとは私も思っています。
(ですので回答欄には書いておりません)
> かなりの量ですが、くっつけて保存し、splitで戻しています。
これは非常に良い設計だと思います。
どういう事なのか私も興味深かったりしますので…勉強がてら拝見させて頂いている次第です。
もう少ししたら締め切ります。
昨日1日かけてプログラムを見直しましたが、これで直るかどうかはわかりません。
コメントしていただいたお二方、ありがとうございました。
もうちょっと見直しますが、報告まで。