目前我正在尝试使用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>
但似乎没什么用。
请建议。
答案 0 :(得分:1)
您可以使用window.open的参数使用javascript执行此操作,例如
window.open('yourUrl','windowName','toolbar=no');
但我不建议这样做。相反(根据您对lujcon的回答的评论),您应该正确设计控制器并查看模型,以防止您所描述的问题。例如,如果用户已经回答了问题,请添加一个标记,然后如果他们为相同的问题发布另一个答案,则可以检查该标志并防止更新/显示错误消息等。
答案 1 :(得分:0)
我能想到使用Web应用程序执行您所要求的唯一方法是使所有“页面”成为使用AJAX从多个Action方法加载结果的单个视图。如果您使用JavaScript / AJAX加载所有内容,浏览器将无法跟踪任何页面历史记录。
答案 2 :(得分:0)
不要这样做!基于Web的应用意味着自由。用户应该做任何他/她想要的事情。问题应该是:我应该如何设计我的应用程序来正确处理和刷新按钮(而不是禁用它们)。禁止打印是无用的,因为用户可以随时进行打印...