プロが教えるわが家の防犯対策術!

例えば24時間後に、リンクを押せるようにcominngsoonが、詳細はこちら
と切り替わるようにしたいのですが、どうすればいいですか?

A 回答 (5件)

まちがえた!


<title></title>がぬけてました。

>簡単に見破れないようにBase64化とかシーザー暗号

ざんねんだなぁ、じかんがあればな~w。
    • good
    • 0

これまでのかいとうをさんこうにしました。

むだにながいし、あたらしいぶらうざでないとうごかない。
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf8">
<body>
<h1>Cominng Soon Test</h1>
<p>
 <a>
  <span id="hoge">Cominng Soon</span>
 </a>
</p>
<script>

function Cookie () {
 var doc = this.document || document;

 if (! navigator.cookieEnabled)
  throw new Error;

 function _setCookie (doc, name, value, expires, path, domain, secure) {
  if (3 > arguments.length)
   throw new Error;

  var cookie = [ encodeURIComponent (name) + '=' + encodeURIComponent (value) ];

  if (expires) cookie[cookie.length] = 'expires=' + new Date (expires).toUTCString ();
  if (path) cookie[cookie.length] = 'path=' + encodeURI (path);
  if (domain) cookie[cookie.length] = 'domain=' + encodeURI (domain);
  if (secure) cookie.push ('secure');

  doc.cookie = cookie.join ('; ');
 }


 function _getCookie (doc, name) {
  if (2 > arguments.length)
   throw new Error;

  var n = encodeURIComponent (name).replace (/\W/g, '\\$&');
  var v = doc.cookie.match (new RegExp (n + '\\s*=\\s*(.*?)(?:[;,\\s]|$)'));

  return (v) ? decodeURIComponent (v[1]): '';
 }


 function SaveCookie (obj, expires, path, domain, secure) {
  if (1 > arguments.length)
   throw new Error;

  for (var prop in obj)
   if (obj.hasOwnProperty (prop))
    _setCookie (doc, prop, obj[prop] || '', expires, path, domain, secure);
 }


 function _trim (str) {
  return String (str).trim ();
 }


 function _collect (result, str) {
  var nv = str.split ('=', 2);

  if (2 == nv.length)
   result[decodeURIComponent (_trim (nv[0]))] = decodeURIComponent (_trim(nv[1]));

  return result;
 }


 function LoadCookie (obj) {
  if (1 > arguments.length) {
   return doc.cookie.split (';').reduce (_collect, new Object);
   
   /*
   obj = new Object;
   var reg = new RegExp ('(?:^\\s*|\\s+)(.+?)\\s*\\=\\s*(.*?)\\s*(?:;|$)', 'g');
   var c = doc.cookie;
   var v;
   
   while (v = reg.exec (c))
    obj[decodeURIComponent (v[1])] = decodeURIComponent (v[2]);
   */
  }
  else {
   for (var prop in obj)
    if (obj.hasOwnProperty (prop))
     obj[prop] = _getCookie (doc, prop);
  }

  return obj;
 }

 return {
  saveCookie: { value: SaveCookie, enumerable: true },
  loadCookie: { value: LoadCookie, enumerable: true }
 };
}


var Events = {
 handleEvent: {
  value: function (evt) {
   var $ = this;
   switch (evt.type) {
   case 'load':
    var o = $.loadCookie ();
    var timeString = o[$.cookieName];
    var dt, dt0, dt1;

    if (timeString) {
     dt0 = +new Date (timeString);
     dt1 = +getUTCDateByServer ();

     if (dt1 > dt0 + $.keepTime - $.waitTime) {
      o[$.cookieName] = null;
      $.saveCookie (o);
     }
     if (dt1 > dt0)
      this.success.call (this, evt);

    }
    else {
     dt = +getUTCDateByServer ();
     o[$.cookieName] = (new Date (dt + $.waitTime)).toString ();
     $.saveCookie (o, new Date (dt + $.keepTime));
    }
    
    break;
   }
  }
 },

 success: {
  value: function (evt) {
   var $ = this;
   var win = evt.currentTarget;
   var t = win.document.querySelector ('#hoge');
   t.textContent = $.message;
   t.parentNode.href = $.url;
//    var o = {}; o[$.cookieName] = null; $.saveCookie (o);//cookie reset
  }
 }
};


function getUTCDateByServer ( ) {
 try {
  var req = new XMLHttpRequest;
  req.open ('HEAD', '#', false);
  req.send (null);
  return (new Date (req.getResponseHeader ('Date')));
 }
 catch (err) { return new Date; }
}


var Param = {
 cookieName: {
  value: 'minnanihanaishodayo'
 },

 waitTime: {
//  value: +Date.UTC (1970, 0, 3, 0, 0, 0, 000) // 3日(最大30日程度まで)
  value: Date.UTC (1970, 0, 1, 0, 0, 5, 000) // 5秒
 },

 keepTime: {
  value: Date.UTC (1970, 0, 1, 0, 0, 10, 000) // 10秒
 },

 message: {
  value: '詳しい説明はこちら'
 },
 
 url: {
  value: 'http://oshiete.goo.ne.jp/qa/8553893.html'
 }
}

function Tools (obj) {
 return Array.prototype.reduce.call (arguments, function (r, o) {
  return Object.create (r, o) }, new Object);
}

addEventListener ('load', Tools (Cookie (), Events, Param), false);
</script>
    • good
    • 0

サーバーなどを介さずに、クライアント側の JavaScript の範疇だけでやるならば



addEventListener('load',関数,false) にて
クッキー minnanihanaishodayo を読み取る
クッキーが無ければ → 現時刻の文字列を設定して終了
クッキーから時刻を読み取り、現在時刻との差分を日数で計算
日数を元に、画面にリンクを表示 (例:日数が3なら、リンク1-3 を表示)

簡単に見破れないようにBase64化とかシーザー暗号とかで、
クッキー値とかリンク先URLの難読化をする一工夫があれば、
サプライズらしくなるのでお勧めです。
    • good
    • 0

一番問題なのは、ユーザーが故意に、あるいはミスでパソコンの時計がずれているとき。


よって時間はサーバーサイドで取得しなければならない
・PHPやCGIでページを動的に書き出す。
 合わせて
  <meta http-equiv="refresh" content="秒数;URL=URL">
 PHPを使うほうが楽かな

・javascriptはAjax( http://ja.wikipedia.org/wiki/Ajax )などで、サーバーとの改訂時間との更新が必要。
 yahoo!オークションの残り時間の表示のような感じになります。

 初回アクセスからと言う事は、人によって時間が異なるということなら、cookieが必要になるでしょう。
    • good
    • 0
この回答へのお礼

詳しくありがとうございます。

やりたいことは、僕のブログにアクセスしてから24時間後にサプライズとして自作漫画ページへのリンクを表示させ、全7話なので、一日毎にページが増える仕組みにしたいなと思っておりました。

これは難しいでしょうか?

お礼日時:2014/04/14 13:13

クッキーで初回アクセス時間をもつか、ログインシステムをつくって


サーバー側で情報をもつかのどちらかでしょうね
    • good
    • 0
この回答へのお礼

No2さんの内容をみると、クッキーで時間を持つ方だと思います。
ありがとうございます。

お礼日時:2014/04/14 13:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!