////////////////// ▼ setName() | setCookie() //ウィンドウネームのセット //setName("変数","値") でウィンドウネームに 変数EQL値AND を付加する //EQLとANDを使うのはN4がウィンドウネームに記号を使えないため //同じ変数名がすでにある場合は削除してから足す function setName(setVarName,setVarValue) { if (setVarValue == undefined) { alert("ScriptError:\nsetVarValue.undefined"); return; } var dblCheck = getVar(top.name,setVarName,"EQL","AND"); //同じ変数名があるか値の取得を試みる if (dblCheck != null) //あったらいったん削除する(変数名の重複を回避) clearName(setVarName); top.name = setVarName + "EQL" + setVarValue + "AND" + top.name; } //cookieのセット //setCookie("変数","値") でcookieに 変数=値; を付加する //有効期限は2ヵ月 function setCookie(setVarName,setVarValue) { var expire = new Date(); expire.setTime(expire.getTime() + (60*24*60*60*1000)); document.cookie = setVarName + "=" + escape(setVarValue) + "; expires=" + expire.toGMTString(); } ////////////////// ▲ setName() | setCookie() ////////////////// ▼ getName() | getCookie() //ウィンドウネームの取得 //任意変数 = getName("変数") で変数の値を任意変数へ代入 //VarClearSelect=1,取得と同時に変数と値をセットで削除 function getName(getVarName,varClearSelect) { var rtnVal = getVar(top.name,getVarName,"EQL","AND"); //値の取得自体はgetVar()が担当 if (rtnVal != null && varClearSelect) //取得と同時にtop.nameから削除するか選択 clearName(getVarName); return rtnVal; } //cookieの取得 //任意変数 = getCookie("変数") で変数の値を任意変数へ代入 //VarClearSelect=1,取得と同時に 変数 = null にする(削除はできない) function getCookie(getVarName,varClearSelect) { var rtnVal = getVar(unescape(document.cookie),getVarName,"=","; "); //値の取得自体はgetVar()が担当 if (rtnVal != null && varClearSelect) //取得と同時に値をnullにするか選択 setCookie(rtnVarName,"null"); return rtnVal; } ////////////////// ▲ getName() | getCookie() ////////////////// ▼ getVar() | varPosFind() //値を取得する本体部分 //targetLineからvarNameを検索し、値を抜き出して返す function getVar(targetLine,varName,EQL,AND) { var startPos = varPosFind(targetLine,varName,EQL,AND); //varNameの先頭文字位置を取得 if (startPos == null) //varNameがない時はnullを返す return null; else { var endPos,rtnVal; startPos = startPos + varName.length + EQL.length; //変数の頭位置+変数の文字列長+イコール記号長 endPos = targetLine.indexOf(AND,startPos); //startPosの次の区切り文字を探す if (endPos == -1) endPos = targetLine.length; //なければ最後にあるとみなす(cookie対策) rtnVal = targetLine.substring(startPos,endPos); if (rtnVal == "null") //文字列の"null"だったら論理値(?)にして返す return null; return rtnVal; } } //checkNameを [AND2]checkName[EQL2] に加工してcheckLineを検索(途中にあるか) //なければ [AND2]checkLine に加工して検索(先頭にあるか) //checkLine中のcheckNameの先頭位置を返す(なければnull) //同じ変数名があるかのチェックにも使用(setName()) function varPosFind(checkLine,checkName,EQL2,AND2) { checkName = AND2 + checkName + EQL2; //ANDvar2EQL var checkPos = checkLine.indexOf(checkName); //途中にあるか if (checkPos != -1) return checkPos + AND2.length; //区切り文字の分プラス else { //最初にあるか checkLine = AND2 + checkLine; checkPos = checkLine.indexOf(checkName); if (checkPos == 0) return checkPos; else if (checkPos == -1) return null; else alert("ScriptError:\nvarPosFind.unknown.result\n\ncheckPos.value = " + checkPos); } } ////////////////// ▲ getVar() | varPosFind() ////////////////// ▼ clearName() //top.nameからclearVarName=値; を削除する //top.name中にclearVarNameがあるかは検索しないので注意 function clearName(clearVarName) { //clearVarNameの先頭文字位置を取得 var headEndPos = varPosFind(top.name,clearVarName,"EQL","AND"); var varHead,varHeadCut; //top.nameの先頭からclearVarNameまでをまとめてカット(後で結合) if (headEndPos > 0) { varHead = top.name.substring(0,headEndPos); varHeadCut = top.name.substring(headEndPos,top.name.length); } else { varHead = ""; varHeadCut = top.name; } //カットしたtop.nameから最初のAND以降をカット(結果的にclearVarNameEQL値ANDだけが残される) var varFoot,footStartPos; footStartPos = varHeadCut.indexOf("AND") +3; varFoot = varHeadCut.substring(footStartPos,top.name.length); //カットしたふたつを結合 top.name = varHead + varFoot; } ////////////////// ▲ clearName() ////////////////// ▼ getSearch() //任意変数 = getSearch("変数") でlocation.searchから値を取得して任意変数へ代入 function getSearch(varName) { var targetLine = top.location.search; if (targetLine.indexOf("?") == -1 || targetLine.indexOf(varName) == -1) return null; var findStartPos; var varTempQ = "?" + varName; var varTempA = "&" + varName; if (targetLine.indexOf(varTempQ) != -1) //頭にある場合 findStartPos = 1; else if (targetLine.indexOf(varTempA) != -1) findStartPos = targetLine.indexOf(varTempA) +1; //&の分+1 var startPos = targetLine.indexOf("=",findStartPos) +1; var endPos = targetLine.indexOf("&",startPos); if (endPos == -1) //最後の要素 endPos = targetLine.length; return targetLine.substring(startPos,endPos); }