我正在开发一个在线测试应用程序,要求在测试过程中,用户不能刷新页面,也不能返回,直到测试结束。我已经使用以下代码通过一切可能的方式(据我所知)成功地禁用了 jquery 中的刷新操作:
$(window).bind({
beforeunload: function(ev) {
ev.preventDefault();
},
unload: function(ev) {
ev.preventDefault();
}
});
但是我在禁用所有浏览器上的后退操作时遇到了麻烦,我得到的最佳解决方案与上面的代码冲突,如下所示:
window.onload = function () {
if (typeof history.pushState === "function") {
history.pushState("jibberish", null, null);
//alert("Reloaded");
window.onpopstate = function () {
history.pushState('newjibberish', null, null);
// Handle the back (or forward) buttons here
// Will NOT handle refresh, use onbeforeunload forthis.
};
}
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;
}
};
}
}
上面的解决方案适合我禁用后退按钮的目的,但与上面的页面刷新预防处理程序冲突。 我不知道该怎么做,我也寻找了很长时间来解决这个问题,但还没有找到。任何帮助将不胜感激,即使采用完全不同的方法来解决问题,我也不会介意。 谢谢大家
更新
我从来没有意识到这样做违反了很多道德规则,无论如何,我已经考虑过并想出了当刷新页面或按下后退按钮(使用键盘或浏览器控件)时要做的其他事情。我想重定向到一个将结束当前考试会话的网址。我相信这是可能的,因此我认为我寻求的解决方案是找到实现这一目标的最佳方法。如果按下后退按钮或刷新按钮(使用浏览器控件和键盘),则重定向到另一个网址。
我尝试了很多选择,但除了这个之外没有一个有效-
//Diable Browser back in all Browsers
if (history.pushState != undefined) {
history.pushState(null, null, location.href);
}
history.back();
history.forward();
window.onpopstate = function () {
history.go(1);
};
关于我在问题中发布的更新,我已经能够解决我的问题。这就是我所做的(只需稍微修改现有代码并删除最初的 window.onload 侦听器):
$(window).bind({
beforeunload: function(ev) {
window.location.replace("my_url_goes_in_here");
},
unload: function(ev) {
window.location.replace("my_url_goes_in_here");
}
});
此构造适用于以任何方式完成的页面刷新和后退操作(使用键盘或浏览器控件来执行其中任何一个操作)。
但是,除了 Firefox 47.0 之外,我还没有在任何其他浏览器中进行过测试,但我很高兴它现在仍然可以工作。 感谢您的所有评论,它们非常有帮助
就我而言,我想在 Chrome 浏览器中禁用后退单击。我尝试了很多方法,最后我从https://www.geeksforgeeks.org/how-to-disable-browser-back-button-using-jquery/
得到了
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
function disableBack() {
window.history.forward()
}
window.onload = disableBack();
window.onpageshow = function(e) {
if (e.persisted)
disableBack();
}
});
</script>
如果您有两个页面 page1 和 page2 并且(page1 重定向到 page2)并且您想限制用户返回 page1,则使用 javascript,只需将此代码放在 page1 即可。
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
function disableBack() {
window.history.forward()
}
window.onload = disableBack();
window.onpageshow = function (evt) {
if (evt.persisted)
disableBack()
}
});
</script>