JavaScriptでcookie取得 その2

IEcookieの挙動にハマったので書いておく。


まず下記のようにcookieを保存する。

document.cookie = 'hoge=piyo; path=/';
document.cookie = 'foo=; path=/';


cookie値を正規表現を使って取得

GetCookie('hoge');
GetCookie('foo');

function GetCookie(name) {
	var regexp = new RegExp('; ' + name + '=([^;]*);');
	var match  = ('; ' + document.cookie + ';').match(regexp);
	if (match) {
		alert(name + '=' + match[1]);
	}
	else {
		alert(name+'に一致するcookieが見つかりませんでした');
	}
}


実行結果は以下のようになる。
Firefox, Opera

hoge=piyo
foo=

IE

hoge=piyo
fooに一致するcookieが見つかりませんでした


IEはなぜ?? となったので調べてみたところ、どうもIEでは、cookie保存時に値を無しにすると
foo
とだけ保存される仕様らしい。


なので仕方なくIE対応版(正規表現のところを変更)

GetCookie('hoge');
GetCookie('foo');

function GetCookie(name) {
	var regexp = new RegExp('; ' + name + '(=([^;]*))?;'); // ←ここを変更
	var match  = ('; ' + document.cookie + ';').match(regexp);
	if (match) {
		alert(name + '=' + match[2]);
	}
	else {
		alert(name+'に一致するcookieが見つかりませんでした');
	}
}


これを実行すると、Firefox,Opera,IE共に

hoge=piyo
foo=

となり、対応可能。


Safariだとどうなんだろう…? その為だけにMac買うか…?