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

时间:2015-02-08 06:40:05

标签: javascript jquery asp.net-mvc c#-4.0 asp.net-mvc-5

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

问题:我希望当用户访问特定页面时,他/她应该无法刷新页面,返回上一页,复制任何内容,打印屏幕。

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

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;   
            }
         };
     }
}

<script type="text/javascript">
    window.onbeforeunload = function() {
        return "Dude, are you sure you want to leave? Think of the kittens!";
    }
</script>

<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>

但似乎没什么用。

请建议。

3 个答案:

答案 0 :(得分:1)

您可以使用window.open的参数使用javascript执行此操作,例如

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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