HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

簡単なアラームアプリ

ちょっと必要が生じて、ブックマークレットを作ったのでさらしておく(謎)。
一応、Firefox 3.6.8で動作確認。

現在のタブで実行する版

整形したコード。

javascript:(
    function(){
        var t=window.prompt('Input time','');
        if(t){
            var msg=window.prompt('Input message','It\'s time to...');
            var tt=t.split(':');
            tt[0]=parseInt(tt[0]);
            tt[1]=parseInt(tt[1]);
            tt[2]=parseInt(tt[2]);
            var now=new Date();
            var target=new Date();
            target.setHours(tt[0]);
            target.setMinutes(tt[1]?tt[1]:0);
            target.setSeconds(tt[2]?tt[2]:0);
            var m2='|'+t+':'+msg+'|';
            document.title+=m2;
            setTimeout(
                function(){
                    alert(m2);
                    var s = document.title;
                    var i=s.indexOf(m2);
                    document.title=s.substring(0,i)+s.substring(i+m2.length);
                },
                (target.getTime()-now.getTime())
            );
        }
    }
)();

ブックマークへの登録用。

javascript:(function(){var t=window.prompt('Input time','');if(t){var msg=window.prompt('Input message','It\'s time to...');var tt=t.split(':');tt[0]=parseInt(tt[0]);tt[1]=parseInt(tt[1]);tt[2]=parseInt(tt[2]);var now=new Date();var target=new Date();target.setHours(tt[0]);target.setMinutes(tt[1]?tt[1]:0);target.setSeconds(tt[2]?tt[2]:0);var m2='|'+t+':'+msg+'|';document.title+=m2;setTimeout(function(){alert(m2);var s = document.title;var i=s.indexOf(m2);document.title=s.substring(0,i)+s.substring(i+m2.length);},(target.getTime()-now.getTime()));}})();

アラーム用の新規タブ/新規ウィンドウを開く版

整形したコード。

javascript:(
    function(){
        window.open(
            "javascript:(
                function(){
                    var t=window.prompt('Input time','');
                    if(t){
                        var msg=window.prompt('Input message','It\’s  time to...');
                        var tt=t.split(':');
                        tt[0]=parseInt(tt[0]);
                        tt[1]=parseInt(tt[1]);
                        tt[2]=parseInt(tt[2]);
                        var now=new Date();
                        var target=new Date();
                        target.setHours(tt[0]);
                        target.setMinutes(tt[1]?tt[1]:0);
                        target.setSeconds(tt[2]?tt[2]:0);
                        var m2='|'+t+':'+msg+'|';
                        document.title+=m2;
                        setTimeout(
                            function(){
                                alert(m2);
                                var s = document.title;
                                var i=s.indexOf(m2);
                                document.title=s.substring(0,i)+s.substring(i+m2.length);
                            },
                            (target.getTime()-now.getTime())
                        );
                    }
                }
            )()",
            'hhelibex:__alarm');
    }
)();

ブックマークへの登録用。

javascript:(function(){window.open("javascript:(function(){var t=window.prompt('Input time','');if(t){var msg=window.prompt('Input message','It\’s  time to...');var tt=t.split(':');tt[0]=parseInt(tt[0]);tt[1]=parseInt(tt[1]);tt[2]=parseInt(tt[2]);var now=new Date();var target=new Date();target.setHours(tt[0]);target.setMinutes(tt[1]?tt[1]:0);target.setSeconds(tt[2]?tt[2]:0);var m2='|'+t+':'+msg+'|';document.title+=m2;setTimeout(function(){alert(m2);var s = document.title;var i=s.indexOf(m2);document.title=s.substring(0,i)+s.substring(i+m2.length);},(target.getTime()-now.getTime()));}})()",'hhelibex:__alarm');})();

難点は、当然のことながら、タイマーを実行しているタブ/ウィンドウを閉じてしまうと設定がおじゃんになってしまうこと。かといって、onunloadイベント拾って‥ということまでは面倒でやりたくなかったので。

携帯のアラームセットしておけばいいじゃん、と言われるとぐうの音も出ない。残念っ!(誰(謎))。