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 ""; }