如何强制浏览器从服务器自动检索新页面,而不是返回缓存的页面

时间:2019-12-11 18:46:42

标签: html spark-java

具有(本地)Web应用程序,首次用户通过Web浏览器连接到服务器时,将显示带有许可协议的弹出窗口。如果他们接受,则将隐藏弹出窗口,并对服务器进行Aysnc调用,该调用将坚持以下事实:已接受EULA,并且将重新创建该页面,因此不会显示任何弹出窗口(如果它们拒绝EULA,应用程序退出)。

如果用户没有做任何其他事情,则很麻烦,然后用户再次通过Web浏览器连接到服务器时,浏览器仅返回缓存的网页,而不是新创建的版本,因此再次显示Eula。

如果他们强制刷新,则EULA弹出窗口将消失,但这对用户而言并不容易。因此,如何强制浏览器转到服务器以获取页面的最新版本,而不是返回缓存的页面。

这是一个html问题,但可能有助于了解我正在使用Spark Framework(一种用于创建Web应用程序的Java框架)。

2 个答案:

答案 0 :(得分:1)

Chrome: Windows:按住“ Ctrl”并单击刷新按钮 Mac:按住“ Shift”并单击刷新按钮

Firefox: Windows:按住“ Ctrl”并按“ F5” Mac:按住“ Shift”并按“ f5”

这被称为“硬刷新”。

答案 1 :(得分:0)

所以我有一个适合我的解决方案。当用户单击“确定”按钮时,它已经调用了与服务器通信的Javascript函数,然后在返回时向现有页面添加了一条消息。

function eulaAccept()
    {
       var xhr = new XMLHttpRequest();
       xhr.open('POST', '/start.eulaaccept', true);
       xhr.setRequestHeader("Content-type", "text/plain");
       xhr.send("done");
       $('#eula').modal('hide')
       xhr.onreadystatechange = function() {
           if (this.readyState == 4 && this.status == 200)
           {
               alerts=document.getElementById("messages");
               var alert = document.createElement("div");
               var msg   = document.createTextNode("Thankyou for accepting the EULA");
               alert.className = "alert alert-info";
               alert.appendChild(msg);
               alerts.appendChild(alert);
           }
       };
    }

但是由于服务器重新创建了页面,所以我只需要添加 window.location.reload(true); 即可在服务器返回后强制重新加载文件。

function eulaAccept()
    {
       var xhr = new XMLHttpRequest();
       xhr.open('POST', '/start.eulaaccept', true);
       xhr.setRequestHeader("Content-type", "text/plain");
       xhr.send("done");
       $('#eula').modal('hide')
       xhr.onreadystatechange = function() {
           if (this.readyState == 4 && this.status == 200)
           {
               window.location.reload(true);
           }
       };
    }

(并且我决定不再需要删除此消息)