※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

二度押し防止

Webアプリケーションにおける二度押し防止方法。

JavaScript編

やり方

隠しフレームを使っちゃったりする。

  • フレーム用HTML
<FRAMESET cols="100%, *">
  <FRAME name="main_frame" src="main.html">
  <FRAME name="hide_frame" src="hide.html">
</FRAMESET>

  • メインページのHTML
<SCRIPT language="JavaScript">
function check_flag(){
    if( parent.hide_frame.submit_flag == 1){
        alert("二度押し禁止。");
        alert("中止ボタン押しちゃったやつはおとなしく5分待て。");
        alert("そしたらもっかいボタン押せるようにしてやるから。");
        return false;
    }else{
        parent.hide_frame.submit_flag = 1;
        document.forms[0].submit();
    }
}
</SCRIPT>

<FORM>
   <INPUT type="button" onClick="check_flag()">
</FORM>

  • 隠しフレームのHTML
<html>
<head>
   <SCRIPT language="JavaScript">
      submit_flag = 0;
      function uncheck_flag() {
         submit_flag = 0;
      }
   </SCRIPT>
</head>
<body onLoad="setTimeout('uncheck_flag()', 300000)">
</body>
</html>

備忘録

  • setTimeOutって一回こっきりだっけ?繰り返し実行されるんだっけ?
  • 「二度押し禁止」ってアラート出すんじゃなくボタンをdisableにして押せなくしてもいいんだけど、5分待たずに強制終了されそうなんで押せるようにしといた方がいいかなと思ってみたり。
  • そしてフレーム解除されると普通にアボーン。
  • 所詮イントラの性善説レベルの対応か・・・
  • しかも、5分後に解除って、
    • 5分以上かかる処理だと普通に二度押し可能
    • でも解除機能が無いと中止ボタン押されたらアボーン