JavaScriptでホームページ専用のCookieを設定する方法
サイトのトップページなど、特定のページだけで有効なCookieを設定したい場合は、Cookieを書き込む前に「現在表示しているページがそのページかどうか」を判定する処理を追加します。
JavaScriptでは window.location.pathname を使うことで現在のページのパスを取得できます。この値をチェックし、対象ページ(例:home.html)と一致した場合にのみ document.cookie でCookieを書き込めば、ホームページ専用のCookieを実現できます。
実装例
以下は、フォームに入力された名前をCookieとして保存するサンプルコードです。「Cookieを設定」ボタンをクリックすると、現在のページが home.html である場合に限りCookieが設定されます。
<html>
<head>
<script>
function WriteCookie() {
if( document.myform.customer.value == "" ){
alert("値を入力してください!");
return;
}
cookievalue = escape(document.myform.customer.value) + ";";
var myPath = window.location.pathname;
var address = myPath.split("/");
if ((address[address.length - 1]).toLowerCase() == "home.html") {
document.cookie = "name=" + cookievalue;
document.write ("Cookieを設定しました : name =" + cookievalue);
}
}
</script>
</head>
<body>
<form name = "myform" action="">
名前を入力:<input type="text" name="customer"/>
<input type="button" value="Cookieを設定" onclick="WriteCookie();"/>
</form>
</body>
</html>
コードのポイント
window.location.pathnameで現在のページのパスを取得します。- パスを「/」で分割し、末尾のファイル名を小文字に変換したうえで「home.html」と一致するかを比較します。
- 一致した場合のみ
document.cookie = "name=" + cookievalue;を実行してCookieを保存します。 escape()で入力値をエンコードしているため、特殊文字が含まれていても安全に保存できます。
なお、escape() は非推奨の関数です。近年のブラウザ向けに開発する場合は、より安全な encodeURIComponent() の使用が推奨されます。
このようにページ判定の条件分岐を挟むことで、意図しないページでCookieが上書きされるのを防ぎ、ホームページ専用のCookieを安全に運用することができます。
-
JavaScriptのdocument.cookieでドキュメントに関連付けられたCookieを取得する方法
JavaScriptでは、documentオブジェクトを使って、ドキュメントに関するあらゆる情報を扱うことができます。このオブジェクトが提供するdocument.cookieプロパティを利用すれば、現在のドキュメントに関連付けられたCookieを簡単に取得できます。なお、このプロパティへのアクセスは読み取り操作のみのため、スクリプト内の他のコードに影響を与えることはありません。 構文 document.cookieは、Cookieを「名前=値」のペアとして保持し、複数のCookieはセミコロン(;)とスペースで区切られた1つの文字列として返されます。 cookie = document.coo
-
JavaScriptで文字列をオブジェクトのキーとして設定する方法
JavaScriptで文字列をオブジェクトのキーとして設定する方法 JavaScriptでは、文字列の値を持つ変数を、そのままオブジェクトのプロパティ名(キー)として利用できます。これを実現するのが「算出プロパティ名(Computed Property Names)」と呼ばれる構文で、ブラケット [] の中に変数を指定するだけでOKです。 例えば、次のような文字列があるとします。 const keyName = username; この文字列をオブジェクトのキーとして設定するには、[] を使って文字列が格納された変数名を渡します。 const stringToObject = { [key