JavaScript で値が空文字のcookieを取得したとき、Chrome や Safari、Firefox では空文字("")が返ってきますが、Internet Explorer (テストしたのは IE8)では undefined が返ってきます。 例えば、次のような setCookie 関数で "testcookie" という名前で空文字をセットします。 setCookie("testcoo...
JavaScript で値が空文字のcookieを取得したとき、Chrome や Safari、Firefox では空文字("")が返ってきますが、Internet Explorer (テストしたのは IE8)では undefined が返ってきます。
例えば、次のような setCookie 関数で "testcookie" という名前で空文字をセットします。
setCookie("testcookie", "", 1);
function setCookie(key, val, days){
var cookie = encodeURIComponent(key) + "=" + encodeURIComponent(val);
if(days != null){
var expires = new Date();
expires.setDate(expires.getDate() + days);
cookie += ";expires=" + expires.toGMTString() + '; path=/;';
}
document.cookie = cookie;
}
これを次のような getCookie 関数で取得して alert で表示してみると、Chrome や Safari、Firefox では空文字となりますが、IE では undefined という文字列が表示されます。
function getCookie1(key) {
if(document.cookie){
var cookies = document.cookie.split(";");
for(var i = 0; i < cookies.length; i++){
var cookie = cookies[i].replace(/\s/g,"").split("=");
if(cookie[0] == encodeURIComponent(key)){
return decodeURIComponent(cookie[1]);
}
}
}
return "";
}
なので、IEでもちゃんと空文字になるようにするには、以下のように変更すれば良いと思います。
function getCookie2(key) {
if(document.cookie){
var cookies = document.cookie.split(";");
for(var i = 0; i < cookies.length; i++){
var cookie = cookies[i].replace(/\s/g,"").split("=");
if(cookie[0] == encodeURIComponent(key)){
var value = "" + decodeURIComponent(cookie[1]);
return (value == "undefined" || value == "null" || value == "") ? "": value;
}
}
}
return "";
}