Javascript 如何限制用户导航回以前的页面并刷新?

Javascript 如何限制用户导航回以前的页面并刷新?,javascript,jquery,asp.net-mvc,c#-4.0,asp.net-mvc-5,Javascript,Jquery,Asp.net Mvc,C# 4.0,Asp.net Mvc 5,目前我正在尝试使用ASP.NETMVC5构建一个网站。 我被卡住了 问题:我希望当用户进入特定页面时,他/她不能刷新页面、返回上一页、复制任何内容、打印屏幕 尝试了以下不同的解决方案: window.onload = function () { if (typeof history.pushState === "function") { history.pushState("jibberish", null, null); window.onpopstat

目前我正在尝试使用ASP.NETMVC5构建一个网站。 我被卡住了


问题:我希望当用户进入特定页面时,他/她不能刷新页面、返回上一页、复制任何内容、打印屏幕

尝试了以下不同的解决方案:

window.onload = function () {
    if (typeof history.pushState === "function") {
        history.pushState("jibberish", null, null);
        window.onpopstate = function () {
            history.pushState('newjibberish', null, null);
            // Handle the back (or forward) buttons here
            // Will NOT handle refresh, use onbeforeunload for this.
        };
    }
    else {
        var ignoreHashChange = true;
        window.onhashchange = function () {
            if (!ignoreHashChange) {
                ignoreHashChange = true;
                window.location.hash = Math.random();
                // Detect and redirect change here
                // Works in older FF and IE9
                // * it does mess with your hash symbol (anchor?) pound sign
                // delimiter on the end of the URL
            }
            else {
                ignoreHashChange = false;   
            }
         };
     }
}


window.onbeforeunload=函数(){
return“伙计,你确定要离开吗?想想小猫!”;
}


函数禁用f5(e){if((e.which | e.keyCode)==116 | |(e.which | e.keyCode)==82)e.preventDefault();
$(文档).ready(函数(){
$(文档)。打开(“向下键”,禁用F5);
});
但似乎什么都不管用


请提出建议。

我能想到的对web应用程序执行要求的唯一方法是将所有“页面”设置为一个视图,使用AJAX加载多个操作方法的结果。如果使用JavaScript/AJAX加载所有内容,浏览器将无法跟踪任何页面历史记录。

不要这样做!基于Web的应用程序意味着自由。用户应该做任何她/他想做的事情。问题应该是:我应该如何设计我的应用程序来正确处理后退和刷新按钮(而不是禁用它们)。禁用打印是无用的,因为在任何时候用户都可以使打印屏幕

您可以使用javascript使用的参数来实现这一点,例如

window.open('yourUrl','windowName','toolbar=no');

不过,我不建议这样做。相反(根据您对lujcon回答的评论),您应该正确设计控制器和视图模型,以防止出现您所描述的问题。例如,如果用户已经回答了一个问题,请添加一个标志,然后如果他们尝试发布同一问题的另一个答案,您可以检查标志并防止更新/显示错误消息等

“我希望当用户进入特定页面时,他/她不能刷新页面、返回上一页、复制任何内容、打印屏幕" ; 你确定你真的想要一个网络应用吗?是的。当他/她参加考试时,它会像一页纸。是的,我同意。然而,假设这是一个考试网站,用户登录该网站参加考试,完成后点击提交,并进入结果页面。考试页面上的问题是随机生成的,如果他刷新了,那么问题可能会改变——我不希望这样。进入结果页面后,用户可以导航回上一页(考试页面)并更改答案-不希望这样。请建议我该如何处理它。你可以在服务器端记住当前的问题id——不管用户想看什么页面——你都知道该显示哪个问题。您应该记住(在服务器端)哪些问题有答案,哪些没有,并防止更改答案…嘿,我是asp.net的新手。您能告诉我如何在控制器已加载的页面中显示任何错误消息吗?@priyam,这是一个新问题的主题,取决于您对应用程序的更多细节和理解,但您可以做一些简单的事情,如
@ViewBag.message
然后在控制器
ViewBag.message=“some message”
如果我仍然需要返回视图,那么这不是仍然会重新加载/刷新页面吗?@priyam,在不了解您实际操作的情况下,我无法给您一个明确的答案,但作为建议,如果用户导航回以前的答案并尝试发布它,在控制器中,检查他们是否已经应答,然后将他们重定向到带有消息的错误页面,或者添加ModelState错误并返回视图。或者更好,防止缓存,并在GET方法中执行检查并重定向到错误页面。有很多方法可以解决这个问题。
<script type="text/javascript">
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which ||  e.keyCode) == 82) e.preventDefault(); };

$(document).ready(function(){
     $(document).on("keydown", disableF5);
});
</script>
window.open('yourUrl','windowName','toolbar=no');