javascript - 如何拦截浏览器后退按钮并调用 Ajax 函数
问题描述
我想拦截浏览器的后退按钮并调用 Ajax 函数来加载页面,因为我的网站完全是 Ajax 驱动的。我同时使用 Chrome 75 和 Firefox 67。
有很多关于拦截浏览器后退按钮的帖子和博客文章。我发现的最好的帖子是How to Detect Browser Back Button event - Cross Browser。我以这种方式实现了他的解决方案:
<script>
document.onmouseover = function() {
//User's mouse is inside the page.
window.innerDocClick = true;
}
document.onmouseleave = function() {
//User's mouse has left the page.
window.innerDocClick = false;
}
window.onhashchange = function() {
if (window.innerDocClick) {
console.log("inner click")
//Your own in-page mechanism triggered the hash change
} else {
console.log("outer click")
ShowPage(3);
//Browser back button was clicked
}
}
</script>
问题是它不会停止后退按钮——浏览器会在我的网站加载之前返回到上一页。我想调用 Ajax 函数 ShowPage 并拦截后退按钮,但这没有发生。
所以我用这个代替了它:
<script>
function HandleBackFunctionality() {
console.log("HandleBackFunctionality");
console.log("Okay, I'm here");
window.onbeforeunload = function() { return "Your work will be lost."; };
ShowPage(3);
return 0;
if(window.event) {
if(window.event.clientX < 40 && window.event.clientY < 0)
console.log("Browser back button is clicked...");
else
console.log("Browser refresh button is clicked...");
} else {
if(event.currentTarget.performance.navigation.type == 1)
console.log("Browser refresh button is clicked...");
if(event.currentTarget.performance.navigation.type == 2)
console.log("Browser back button is clicked...");
}
}
</script>
但这根本行不通。我什至看不到是否出现任何 console.log 消息,因为我立即被带到我之前最后一次访问的站点。
此时,我要做的就是停止后退按钮,这样我就可以看到 console.log 消息了。最好它会停止默认的后退按钮功能并调用我的 Ajax 函数。
我没有发布函数 ShowPage 的代码,因为它在整个站点中被广泛使用,所以这不是问题。
感谢您在拦截后退按钮和调用我的 Ajax 函数方面提供的任何帮助。
解决方案
推荐阅读
- sql - Access SQL 查询:用单词替换特定数字
- arrays - 如何使用数组反转技术旋转数组?
- javascript - 将鼠标悬停在名称上以更改香草 JS 中的颜色
- kubernetes - 关于在kubernetes(k8s)平台上运行pod的问题:pods are running but the containers are not-ready
- git - 为什么我的分支和开发之间的所有差异都没有显示在 PR 中?
- mongodb - 用于 json 类型值的 Mongodb Liqbase 脚本 findOneAndUpdate
- javascript - 让图像飞出屏幕
- python - 绕过多个 url 时更改 url 后缀的反爬虫
- javascript - 在 javascript 中重命名和更改属性/值的最有效方法
- javascript - Node.js:如何在 AWS Lambda 中进行错误处理?