0

尝试通过此示例 javascript 代码检测后退按钮事件:

document.location.hash="#1";
document.location.hash="#2";
document.location.hash="#3";

function check() {
    if("#3"!=window.location.hash) {
        alert("Back button clicked");
    }
    setTimeout(check, 100);
}
check();

在 FF 和 Chrome 中它可以工作,在 IE 中 window.location.hash 始终为“#3”,即使我单击“后退”按钮并观察地址栏中的 URL 如何更改 #2、#1。

有什么方法可以让 IE 在向后和向前按下后看到哈希的变化?

4

1 回答 1

0

我假设您正在通过用户或定时事件动态更改哈希。

您不需要使用 setTimeout 来检查哈希,因为有一个 window.onhashchange 事件可以用来触发您的代码。

window.onhashchange = function(e) {
  alert('Back button clicked');
}

每次哈希更改时都会触发此代码,无论是通过使用后退/前进历史按钮还是通过代码更改哈希。如果您不希望在使用代码更改哈希时触发代码,则可以使用 if 语句,以便它仅适用于后退/前进历史导航,如下例所示: https ://stackoverflow.com /a/11545805/1534818

或者

您可以使用 window.onhashchange 根据哈希值执行所有代码,并使用 onclick 事件更改哈希值,以确保您的代码只执行一次。

html:

<a href='#1' class='nav'>1<a/>
<a href='#2' class='nav'>2<a/>
<a href='#3' class='nav'>3<a/>

javascript/jquery:

/*$('.nav').click(function() {                 //do this if you aren't
  window.location.hash = '#' + $(this).html(); //changing the hash in your html
});*/
function getLocationHash() {
  return window.location.hash.substring(1);
} 
window.onhashchange = function(e) {
  switch(getLocationHash()) {
    case '1': 
      execute code block 1;
      break;
    case '2':
      execute code block 2;
      break;
    case '3':
      execute code block 3;
      break;
    default: 
      code to be executed if different from case 1, 2, and 3;
  }
}

我在我的网站上做了一些类似的事情:http: //www.designhandler.com

于 2012-07-18T16:51:16.463 回答