JavaScript 导航到其他选项卡时提示 window 消失

JavaScript prompt window disappears when navigating to other tab

我已经编写了以下代码片段来在我的网站上启用密码,但是如果我导航到浏览器上的不同选项卡,密码提示就会消失并且此功能不再有用。

 function passWord(title) {

       var pwd = prompt(title);

       switch (pwd) {
         case '2017': true;
           break;

         case null: passWord('Access Denied - Password Incorrect, Please Try Again.');
           break;

         default: passWord('Access Denied - Password Incorrect, Please Try Again.');
       }
     }

我在 body 标签中调用这个函数。

   <body onload="passWord('Please enter password here')">

您可以使用 focus 事件查看用户何时返回您的页面:

var didEnterPassword = false;

window.addEventListener("focus", function(e){
    if(!didEnterPassword && prompt("hello again") == "my secret password"){
        didEnterPassword = true;
    }
})

请记住,这 非常不安全 因为任何人在开始挖掘您的代码时都可以 my secret password

你可以试试这个方法:

<style>#screen {display: none;}</style>
<body onload="passWord();">
  <div id="welcome">
    <h1>Welcome Page</h1>
  </div>
  <div id="screen">
    <h1>Unique Page</h1>
  </div>
  <script>
    function passWord() {
      var welcome = document.getElementById("welcome");    
      var screen = document.getElementById("screen");
      var pwd = prompt("Enter your password", "TYPE HERE");
      switch(pwd) {
        case "2017":
          screen.style.display = "block";
          welcome.style.display = "none";
        break;
        default:
          screen.style.display = "none";
          welcome.style.display = "block";
      }
    }
  </script>
</body>

正如@Caleb Black 评论 - 如果安全问题,最好使用 php 来处理这些事情。祝你好运!

您可以使用 while 循环来保持 运行 只要用户还没有发送他们的答案:

var pwd;
while(pwd == null) pwd = prompt(title);

请注意,它不会保留失去焦点之前输入的任何文本。