2015-05-18 58 views
2

对不起,如果重复,但我不明白如何在我的情况下使用基本方法。 当用户按下浏览器中的按钮时,我需要隐藏一些div。这就是我所需要的。该页面不得重新加载。我试过这种方式:如何防止默认并覆盖浏览器的后退按钮行为?

window.onpopstate = function (event) { 
    event.preventDefault(); 
    alert("Back button pressed"); 
    myDiv.style.display = 'none'; 
} 

但这根本不起作用。即使警报不会触发。浏览器一如既往地回归。

如何使它工作?首先,这必须在移动浏览器中有效。 window.location.hash的使用是否会触发页面重新加载?

回答

1

否,更换位置散列不会做一个页面重新加载(这是所有单页的应用程序是基于。

防止行为单击后退按钮后(这将触发页面重载)是。不是一个真正的选择,你可以做的最好的是向用户发出警告:

window.onbeforeunload = function() { 
    return 'Sure you want to leave?'; 
}; 
+0

所以,我怎么能隐藏myDiv当用户试图回去吗?它可以在智能手机上使用吗? – splash27

+0

你可以在onbeforeunload函数中隐藏它,但我真的没有看到它的任何用处。是的......它将用于智能手机。 –

4

简短的回答:你不能改变它

龙答:

您应该首先设置State然后使用事件处理程序获取它。

因此,简单地说,当用户点击文档的特定部分,例如<a>时,您设置State,然后当他点击(浏览器)后退按钮时您已触发事件。

someElement.addEventListener('click', function(e) { 

    history.pushState({ state: 'someElement was clicked' }, 'title', 'some-element.html'); 

}) 

现在,当后退按钮被按下时,您将收到警报(如您的问题中所示)。

对于furthur信息检查这里:Manipulating the browser history(mdn)

+0

请注意,在<10或更旧的Android浏览器(<4.2)中不支持pushState(<4.2) –

+0

@BasSlagter你是对的,但我们在问题中看到'window.onpopstate',意味着他知道它是什么。谢谢btw;) – mrReiha

相关问题