当前位置: 首页 > 面试题库 >

在我的AJAX应用程序中拦截对“后退”按钮的调用

缑嘉玉
2023-03-14
问题内容

我有一个AJAX应用。用户单击一个按钮,页面的显示就会更改。他们单击“后退”按钮,希望进入原始状态,但是,却转到浏览器中的上一页。

如何截取并重新分配后退按钮事件?我已经研究过RSH之类的库(我无法使用…),而且我听说使用井号在某种程度上有所帮助,但我无法理解。


问题答案:

啊,后退按钮。您可能想象“后退”会触发一个JavaScript事件,您可以像这样简单地将其取消:

document.onHistoryGo = function() { return false; }

不对 根本没有这样的事件。

如果您确实有一个 Web应用程序
(而不只是一个具有某些ajaxy功能的网站),那么接管后退按钮(如您提到的,URL上的片段)是合理的。Gmail会这样做。我说的是什么时候您的Web应用程序在一个页面中完全独立。

该技术很简单-每当用户执行修改操作时,都将重定向到您已经使用的相同URL,但具有不同的哈希片段。例如

window.location.hash = "#deleted_something";
...
window.location.hash = "#did_something_else";

如果您的Web应用程序的整体状态是可哈希的,那么这是使用哈希的好地方。假设您有一封电子邮件列表,也许您将它们的所有ID和已读/未读状态连接起来,并使用MD5哈希作为片段标识符。

这种重定向(仅适用于哈希)不会尝试从服务器获取任何内容,但会在浏览器的历史记录列表中插入一个插槽。因此,在上面的html" target="_blank">示例中,用户点击“后退”,他们现在在地址栏中显示
#deleted_something 。他们再次回击,它们仍然在您的页面上,但没有哈希。然后再回来,他们 实际上 回到了他们来自哪里。

现在,最困难的部分是让您的JavaScript检测用户何时回击(以便您可以还原状态)。您要做的就是观察窗口位置,并查看其何时更改。随着投票。(我知道,,轮询。好吧,现在没有比这更好的跨浏览器了)。但是,您将无法确定它们是前进还是后退,因此您必须借助哈希标识符来发挥创意。(也许哈希与序列号串联在一起…)

这是代码的要旨。(这也是jQuery History插件的工作方式。)

var hash = window.location.hash;
setInterval(function(){
    if (window.location.hash != hash) {
        hash = window.location.hash;
        alert("User went back or forward to application state represented by " + hash);
    }
}, 100);


 类似资料:
  • 问题内容: 我正在使用Material-ui的选项卡,这些选项卡是受控的,并且将它们用于(React-router)链接,如下所示: 如果我正在访问仪表板/数据并且单击浏览器的后退按钮,则可以转到仪表板/用户(例如),但突出显示的选项卡仍停留在仪表板/数据上(值= 2) 我可以通过设置状态来更改,但是当按下浏览器的后退按钮时,我不知道如何处理该事件? 我发现了这一点: 但这在每次状态更改时都会调用

  • 问题内容: 我正在使用pushState为网站上的Ajax内容创建有意义的URL。我想在用户单击前进或后退按钮时刷新Ajax内容。但是我遇到了问题,因为Chrome(正确)在“历史记录遍历”(前进/后退按钮)和“结束”(页面加载)上都暗示了onpopstate。我想创建一个区分页面加载和历史遍历的onpopstate处理程序,因为如果已经成功加载Ajax内容,我就不希望刷新它。有人可以帮助我区分两

  • 问题内容: 我正在尝试在Cordova应用程序上禁用后退按钮。我正在使用AngularJS + Ionic Framework。我找到了有关此主题,并尝试了下面的代码,但它绝对没有效果。任何想法? index.html 请注意,当我按下后退按钮时,控制台中会显示“ hello”。 问题答案: 终于找到了这个 Ionic论坛主题的答案: 允许完全覆盖后退按钮行为。第一个参数是回调函数,第二个参数是优

  • 问题内容: 我的应用程序包含A,B和C这三个活动。我通过“确定”按钮从A移到B,并且我想使用Android设备的默认后退按钮从B移到A。但是,当我按下按钮时,整个应用程序将关闭。我该如何解决这个问题? 问题答案: 我怀疑您是通过“确定”按钮onclick监听器调用的。不要那样做 从活动堆栈中删除您的活动。 在这里阅读更多。

  • 当按下后退按钮时,我需要最小化应用程序。 我使用下面的代码来捕获硬件后退按钮点击事件 帮助我在后按键时最小化的代码

  • 问题内容: 我试图拦截所有AJAX调用,以检查AJAX响应是否包含我从PHP脚本作为JSON发送的特定错误代码(代码:ACCESS_DENIED,SYSTEM_ERROR,NOT_FOUND)。 我知道一个人可以做这样的事情: 但是-仅在“ ajaxSuccess”事件起泡到.log div时才起作用吗?我对么?通过将“ ajaxSuccess”事件绑定到文档可以实现我想要的东西吗? 我可以在jQ