- 締切済み
アクセス時からのカウントダウンタイマー設置について質問です。
アクセス時からのカウントダウンタイマー設置について質問です。 サイトに設置するカウントダウンタイマーで 例えば、期限を2日間と設定し、 初回の訪問時からカウントできますか? 同じ人が2回目にサイトを訪問した場合は 初回からカウントされた時間の続きになります。 ですから、訪問者1人1人 訪問時間が違うわけですから、 それぞれ期限が異なることになります。 このような設定のスクリプトは可能でしょうか?
- みんなの回答 (13)
- 専門家の回答
みんなの回答
- babu_baboo
- ベストアンサー率51% (268/525)
No.4,6,8,12です > しらべときます。 といっておきながら、しらべるまえに、「とある(うちゅうじんのような?)かた」に おしえていただきました。いか。そのいんようです。 ・encodeURI(s) は、s を「URI として機能するよう」エスケープする。 ・encodeURIComponent(s) は、s を「URIComponent として埋め込めるよう」エスケープする(それ自体が URI として機能するとは限らず、元の形に戻す責任はアプリ側が負う)。 Cookie のドメイン指定は(相対)URI として機能させねばならないので、ここで encodeURIComponent() を使ってはいけません。 ということです。(のどぼとけを、れんだで、ちょっぷしながらいうと、それっぽいです) それと、「とある(こっちはふっつうのちきゅうじんの)かた」からも、 してきがありました。 function addDay ( day, date ) { if( 'number' !== typeof day ) day = 0; if( 'object' !== typeof date ) date = new Date; return (date.setDate( date.getDate() + day ), date); } は、 function addDay ( day, date ) { if( 'number' !== typeof day ) day = 0; if( 'object' !== typeof date ) date = new Date; date.setDate( date.getDate() + day ); return date; } にです。やってることは、おなじなのですが、まぎらわしくかいてどうする? ということで。ていせいしてください。ごめんなさい。
- babu_baboo
- ベストアンサー率51% (268/525)
なぁ~にぃ~やっちまったなぁ~! targetDay = addDay(2).getTime(); を targetDay = addDay( LIMIT_DAY ).getTime(); に。 encodeURIComponent() ? ごめん、しらべときます。 (よってたかって・・・。)
- fujillin
- ベストアンサー率61% (1594/2576)
ぼそっと。 (part2?) LIMIT_DAY = 2; って使ってないけど…
- think49
- ベストアンサー率59% (285/482)
興味深かったので、URIエンコード関数を一通り調べてみました。 encodeURIComponent - MDC https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Functions/encodeURIComponent decodeURIComponent - MDC https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Functions/decodeURIComponent encodeURI - MDC https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Functions/encodeURI decodeURI - MDC https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Functions/decodeURI javascript: escape(), encodeURI(), encodeURIComponent() 比較 (groundwalker.com) http://groundwalker.com/blog/2007/02/javascript_escape_encodeuri_encodeuricomponent_.html You Look Too Cool ? JavaScriptのescapeとencodeURIとencodeURIComponentの違い http://stabucky.com/wp/archives/554 encodeURIComponent() は知っていたけど、encodeURI() は知らなかったなあ。 ------- var uri = 'http://example.com/search?foo=テスト& foo=&hoge=*!"(),/.&end'; alert (encodeURI(uri)); // http://example.com/search?foo=%E3%83%86%E3%82%B9%E3%83%88&%20foo=&hoge=*!%22(),/.&end alert (encodeURIComponent(uri)); // http%3A%2F%2Fexample.com%2Fsearch%3Ffoo%3D%E3%83%86%E3%82%B9%E3%83%88%26%20foo%3D%26hoge%3D*!%22()%2C%2F.%26end ------- ・encodeURIComponent() はGETパラメータなどにURIを埋め込むときのために完全にURIエンコードする。 ・encodeURI() はURIとしてはほぼ正しいのだけど、URIエンコードの取りこぼしがある場合において安全な文字にエスケープする。 encodeURI() は「引数にとる値がURIとして正しい文字列である必要がある」ので、使いどころが難しいですね。 万全を期すならば、URIをパースする必要があるのではないかと思います。 例えば、#8 で babu_babooさん は encodeURI (domain) を使われていますが、「domain が正しいURIであること、をどこで保証するのか」って問題が出てきそうです。 私ならそういうのを考えるのが面倒なので、encodeURIComponent() で強制的にエンコードする方法をとるかもしれない…。
- babu_baboo
- ベストアンサー率51% (268/525)
//その2_________________________ var COOKIE_NAME = 'myCount'; var LIMIT_DAY = 2; var SHELF_LIFE = 10; var TIMEOUT_MESS = 'おとといきやがれぇ~!'; var node = doc.getElementById( 'mess' ); var targetDay = parseInt( getCookie( COOKIE_NAME ) ); if( !targetDay ) { targetDay = addDay(2).getTime(); setCookie( COOKIE_NAME, targetDay + '', SHELF_LIFE ); } (function () { var text = '花火点火まであと、'; var s = (targetDay - (new Date).getTime()) / 1000 |0; if (s < 0) text = TIMEOUT_MESS; else { text += padding( s / 86400 |0) + '日と' + padding( s % 86400 / 3600 |0) + '時間' + padding( s % 3600 / 60 |0) + '分' + padding( s % 60 |0) + '秒です'; setTimeout (arguments.callee, 1000); } node.firstChild.nodeValue = text; })(); })(this.document); //--> </script>
- babu_baboo
- ベストアンサー率51% (268/525)
かいてみた。やっぱりむだにながいので、ぶんかつです。 ぜんかくくうはくは、はんかくにでもして。 2にちたってみないと、むしとりできませ~ん!? <!DOCTYPE html> <title></title> <style type="text/css"> body { background : black; color: red; } p { font-size:200%; } p.cm { font-size: 400%; color: green; } p.cm2 { font-size: 100%; color: yellow; } <style type="text/css"> </style> <body> <p id="mess">有効期限は、初めてページを閲覧してから2日です</p> <p class="cm">花火大会開催中!!</p> <p class="cm2">(出場者募集中、商品はなんと「黒豆10粒」)</p> <script type="text/javascript"><!-- (function (doc) { function addDay ( day, date ) { if( 'number' !== typeof day ) day = 0; if( 'object' !== typeof date ) date = new Date; return (date.setDate( date.getDate() + day ), date); } function getCookie ( name ) { name = encodeURIComponent( name ).replace( /([.*()]) /g, '\\$1' ); var value = doc.cookie.match( RegExp( name + '\\s*=\\s*(.*?)(?:[\\s;,]|$)' ) ); return value ? decodeURIComponent( value[1] ): ''; } function setCookie ( name, value, day, path, domain ) { return doc.cookie = encodeURIComponent (name) + '=' + encodeURIComponent (value) + '; ' + 'expires=' + ( addDay(day) ).toUTCString () + '; ' + (path ? 'path=' + encodeURI (path) + '; ': '') + (domain ? 'domain=' + encodeURI (domain) + '; ': ''); } function padding ( n ) { return n < 10 ? '0' + n: n; }
- zeff
- ベストアンサー率69% (137/198)
>babu_babooさんへ いやいや、ぜんぜんそんなことはないですよ^^ 大した引き出しもないのに出しゃばって失敗したなぁと思って; まだまだわからないことが多いので、 慎重に回答しないとならないなぁと反省しておるところです。 それに誤りや間違いを指摘されるのは自分も勉強になるし、 悪い気どころか逆に「ありがとう」という気持ちです。 ですので、ほんとにお気になさらずに^^
- babu_baboo
- ベストアンサー率51% (268/525)
zeff さんへ きをわるくしないでね。 ほかで、taloo さんがおっしゃっられていましたが、 >他の回答者からのツッコミがないというのが最大の欠点 まったく、そのとおりだとおもいます ほかのかたがたのように、てきかくな「資料」をていじしませんが 「ぼそっと」は、つづくかな? わたしに、がっつんとつっこむと、へこみ(&むつける(方言))ますが、ぬる~ぃのならOK!
- zeff
- ベストアンサー率69% (137/198)
今回のご質問の解決点は「Cookieを使うんだ」という点だと思います。 スクリプトはとりあえず動いたのでオマケで載せただけです。 その中にキーワードが含まれてそうだったので。 escapeやunescapeが何の働きをしてるかわかっていませんし; 非推奨?なのも知らないぐらいで^^; だから自分が偉そうに言うことでは無いんですけど、 正しく動くスクリプトが欲しいならそれを待つも良し、 がんばって自分で作ってみたけど動かない等の場合に再質問、 というのが適切では無いでしょうか。
- babu_baboo
- ベストアンサー率51% (268/525)
ぼそっと。 escape および unescape かんすうは https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Deprecated_Features
- 1
- 2
お礼
ご回答いただきましてありがとうございます。 こちらのURLですが、 勉強不足でして^^; すみません。