我正在使用Ajax和hash进行导航.
有没有办法检查是否window.location.hash改变了这样?
http://example.com/blah #123到http://example.com/blah #456
如果我在文档加载时检查它,它可以工作.
但是如果我有基于#hash的导航,那么当我按下浏览器上的后退按钮时它就不起作用了(所以我从#456跳到了#123).
它显示在地址框内,但我无法用JavaScript捕获它.
javascript ajax javascript-events fragment-identifier hashchange
我有一个AJAX应用程序.用户单击按钮,页面的显示会发生变化.他们点击后退按钮,期望进入原始状态,但是,他们会在浏览器中转到上一页.
如何拦截和重新分配后退按钮事件?我已经研究过像RSH这样的库(我无法工作......),我听说使用散列标签会有所帮助,但我无法理解它.
如何知道在firefox中是单击刷新按钮还是单击浏览器后退按钮...对于这两个事件onbeforeunload()方法都是回调.对于IE我正在这样处理:
function CallbackFunction(event) {
if (window.event) {
if (window.event.clientX < 40 && window.event.clientY < 0) {
alert("back button is clicked");
}else{
alert("refresh button is clicked");
}
}else{
// want some condition here so that I can differentiate between
// whether refresh button is clicked or back button is clicked.
}
}
<body onbeforeunload="CallbackFunction();">
Run Code Online (Sandbox Code Playgroud)
但在Firefox中,event.clientX和event.clientY 始终为0.还有其他方法可以找到它吗?
有人可以分享经验/代码我们如何检测浏览器后退按钮点击(对于任何类型的浏览器)?
我们需要满足所有不支持HTML5的浏览器
可能重复:
检测浏览器中的后退按钮
我有两个页面,Page1和Page2.当通过单击链接从Page1移动到Page2时,我倾向于存储在Page2上单击浏览器后退按钮时恢复Page1状态所需的条件.
我使用以下函数来清除缓存,
protected override void OnInit(EventArgs e)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Response.Cache.SetExpires(DateTime.MinValue);
base.OnInit(e);
}
Run Code Online (Sandbox Code Playgroud)
这样我就可以根据cookie中存储的条件重新加载页面.但问题是如何确定我是否按下浏览器后退按钮或菜单链接来到Page1.
更新:
我刚刚登陆此链接检测浏览器中的后退按钮,但它对我不起作用
惩罚时间,我认为发布这个问题是不合适的,因为它已经被问了很多次,但这次我发布准备好后果,因为我别无选择.我会回答任何评论,我也可以在下面给出的任何链接上展示我的尝试(你会感兴趣).
我有一个登录页面和一个page1.我需要在登录页面上处理或不工作浏览器后退按钮.这可能是我为FF和Chrome做的,但无法为IE做.我的FF工作代码如下.
window.onload = function ()
{
if (typeof history.pushState === "function")
{
history.pushState("jibberish", null, null);
window.onpopstate = function ()
{
history.pushState('newjibberish', null, null);
// alert('back button pressed');
// This works in Chrome and FireFox but not in IE
};
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在我的登录页面中有一些代码(在所有浏览器上工作),以便:所需的输出:在登录页面上按下后退按钮不会将用户带回到page1(就像facebook登录页面一样).我不想禁用后退按钮,只是为了处理它在登录页面上的点击.
从评论编辑.请回答该怎么做,我读过"不要这样做"而不是该做什么.以下代码适用于页面加载,除非通过后退按钮加载此页面(第1页),然后单击登录页面
if (Session["role"] == null)
Response.Redirect("login.aspx");
Run Code Online (Sandbox Code Playgroud)
我试图在同一个问题上跟几个问题,但一直无法得到我需要的东西.我宁愿不使用window.location.hash,但如果没有其他解决方案就准备好了
就像标题所说,onstatechange如果pushState函数被调用,我希望能够执行不同的事件,而不是back函数.或者,如果go功能为负或正.
例:
如果History.pushState()或被History.go(1)调用,我想要statechange事件的回调forwardPushState
如果History.back()或被History.go(-1)调用,我想要statechange事件的回调backwardsPushState
javascript javascript-events browser-history history.js html5-history
我熟悉html5 History API,但我使用history.js来扩展兼容性,
我有一个问题就是这样,我怎么知道:
History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
var State = History.getState(); // Note: We are using History.getState() instead of event.state
/* Condition here to know if this change is a back or next button, and wich one?? */
});
Run Code Online (Sandbox Code Playgroud)
这是我的"整体"代码......
var the = this;
var History = window.History;
if ( !History.enabled ) {
return false;
}
/* Store the initial content*/
History.replaceState({
content: $('#main').html()
}, document.title, document.location.href);
/* Bind to StateChange …Run Code Online (Sandbox Code Playgroud) window.history.length在我们的项目中,值非常重要,可以在浏览器上单击检测后退按钮.但是我意识到window.history.length没有通过50.如何解决这个问题?谢谢你的帮助.
我在这里有点微妙的情况.在我的组织中,我们设计库存管理系统,它是一个基于JSP页面和servlet的Web应用程序,用于处理它们.
我被要求解决一个具体问题.我们有一个带有HTML表单的JSP页面,其中有库存详细信息.当用户手动输入详细信息并提交表单时,库存详细信息在数据库中更新,并且工作正常.
问题是这样的:当用户按下浏览器的后退按钮时,用户可以转到他提交详细信息的上一页.当用户提交此数据时,数据会再次保存到数据库中.我需要防止这种行为.(清楚并重新加载页面的东西.)
到目前为止我做的事情:清除浏览器缓存.Code工作正常但不是预期的结果.
遗憾的是,由于公司规定,我无法分享代码.我需要的是帮助防止这种行为或解决方法.
提前致谢..
javascript ×7
back-button ×3
browser ×3
ajax ×2
history.js ×2
jquery ×2
api ×1
asp.net ×1
c# ×1
dom-events ×1
form-submit ×1
hashchange ×1
html5 ×1
java ×1
servlets ×1
session ×1