初回エリア判定時に取得したエリア等の情報をCookieに書き込んでおき、二回目以降はCookieを参照した結果に基づいて判定をさせるサンプルです。ネットワークのトラフィック量をコントロールしたい場合や、APIサーバへのリクエスト回数を極力抑えたい場合などに役立ちます。
初回エリア判定時に取得したエリア等の情報をCookieに書き込んでおき、二回目以降はCookieを参照した結果に基づいて判定をさせるサンプルです。ネットワークのトラフィック量をコントロールしたい場合や、APIサーバへのリクエスト回数を極力抑えたい場合などに役立ちます。
Cookieを利用してコンテンツを制御するには、ファイルの読み込み時と、読み込み完了時の2回のタイミングでスクリプトを実行をさせる必要があります。以下は、都道府県別に画像を切り替える一例です。
var prefCode = getCookie( "prefCode" ); // Cookieから「prefCode」の値を取得
if ( !prefCode || !prefCode.match(/^0[1-9]|[1-3][0-9]|4[0-7]$/) ) { // prefCodeの値が正しいか確認
// 値がない、もしくは正しくない
document.write( '<script type="text/javascript" src="http://api.docodoco.jp/v3/docodoco?key=APIキー" charset="utf-8"></sc'+'ript>' ); // どこどこJPを呼び出す
prefCode = "";
}
addEvent( window, "load", function() { // onLodeイベントハンドラに登録
if ( !prefCode ) { // prefCodeの値がない(Cookieに値が無い)
if ( prefCode = SURFPOINT.getPrefCode()) { // どこどこJPの都道府県コードを取得
regCookie( "prefCode", prefCode, 30 ); // Cookieに保存期間30日として登録
}
else { // 都道府県コードが取得出来ない
prefCode = "13"; // 代替えコードを指定(13:東京)Cookie保存はしない
}
}
document.getElementById("id要素").src = "image_pref" + prefCode + ".jpg"; // 指定したid要素の画像を書き換える
// 画像ファイルは都道府県ごとに用意しておく。「image_pref01.jpg ~ image_pref47.jpg」
});
// イベント登録関数
function addEvent( elm, listener, fn ) {
try {
elm.addEventListener( listener, fn, false );
} catch( e ) {
elm.attachEvent( "on"+listener, fn );
}
}
// Cookie読み込み関数
function getCookie( key ) {
var cookie = document.cookie;
var tmp = cookie.split(";");
var oExp = new RegExp(" ", "g");
key = key.replace(oExp, "");
var i = 0;
while (tmp) {
var word = tmp[i].split("=");
word[0] = word[0].replace(oExp, "");
if (key == word[0]) return unescape(word[1]);
if (++i >= tmp.length) break;
}
return "";
}
// Cookie登録関数
function regCookie( key, value, expires ) {
if ( !expires ) { expires = 1; }
var exp = new Date();
var plusDay = 1000*60*60*24*expires;
exp.setTime( exp.getTime()+plusDay );
document.cookie = key+"="+escape( value )+"; expires="+exp.toGMTString();
}
デフォルトでは、Cookieに書き込まれた情報は30日間で破棄される設定になっていますが、これはどこどこJPが最新データに毎月1回アップデートをするため、最適な判定を維持する為の推奨設定です。
![]()