在JavaScript中,如果你想阻止用户通过点击浏览器的“后退”按钮来导航到历史记录中的上一个页面,你可以通过监听`popstate`事件来实现。当用户尝试点击“后退”按钮时,会触发这个事件。
以下是一个简单的示例代码,它会在用户尝试点击“后退”按钮时弹出一个警告框:
```javascript
window.addEventListener('popstate', function(event) {
event.preventDefault(); // 阻止默认行为
alert('不允许后退!');
});
```
请注意,`event.preventDefault()` 方法在这里是用来阻止事件默认行为的,但在实际浏览器中,由于安全原因,大多数浏览器不允许脚本阻止 `popstate` 事件的默认行为。因此,上面的代码在大多数现代浏览器中可能不会按预期工作。
不过,你可以通过修改浏览器的历史记录来达到类似的效果。以下是一个使用 `history.pushState()` 和 `history.replaceState()` 方法来修改历史记录的示例,从而实现阻止用户点击“后退”按钮:
```javascript
// 当用户尝试点击后退按钮时,我们替换当前历史记录条目
window.addEventListener('popstate', function(event) {
history.replaceState(null, null, document.title);
alert('不允许后退!');
});
```
在这个示例中,我们监听 `popstate` 事件,并在事件触发时使用 `history.replaceState()` 方法替换当前的历史记录条目,同时弹出一个警告框。这样,当用户尝试点击“后退
相关内容:
浏览网页时,当从A页面点击跳转到B页面后,一般情况下,可以点击浏览器上的“后退”按钮返回A页面。
如果进入B页面后,B页面想让访问者留下,禁止返回,是否可以实现呢?
这简直是要控制浏览器的行为,虽然有些邪恶,但确实可以实现,使用特殊的JavaScript代码就可实现。
方法如下:
实现原理:
监听浏览器的popstate事件,该事件会在用户点击浏览器的回退按钮时被触发。
然后,使用History.pushState()方法向当前浏览器会话的历史堆栈中添加一个陷阱状态,该状态会使“回退”操作无效。
JS源码:
<script>
//浏览器返回键事件
pushHistory();
window.addEventListener("popstate", function(e) {
//判断移动端
var userAgentInfo = navigator.userAgent;
var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
var equipmentType = false;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents) != -1) {
equipmentType = true;
break;
}
}
if (equipmentType) {
$("#mask-back").show();
$("#mask-back .back-close").on("click", function() {
$("#mask-back").hide();
})
}
pushHistory(); //注,此处调用,可以让用户一直停留着这个页面
}, false);
function pushHistory() {
var stateeee = {
title: "title",
url: "#"
};
window.history.pushState(stateeee, "title", "#");
}
</script>

测试方法:
建立两个文件:a.html、b.html。
a文件内容简单写一句代码:
<a href="b.html">goto b.html</a>。
b文件内容写入上面的源码。
打开a页面,点击链接进入b页面,这时再点击浏览器上的“后退”按钮,会发现:操作无效,无法后退。
提升强度:
这个黑暗的技巧,虽然使用了不常见的技术方法,但查看页面源码很容易发现其实现原理。
为了保护代码、防止代码被分析,可以对上面的JavaScript代码加密,加密使用JShaman。
进入JShaman官网,贴入代码:

在配置中,勾选“字符串加密”:

然后生成混淆加密的JavaScript代码:

复制粘贴回b文件:

这时,代码成为加密状态,虽然不影响运行,是万万不可能了。