onhashchange 事件未检测到“/Home/Index”和“/”之间的变化 - ASP.NET MVC3

onhashchange event doesn't detect changes between "/Home/Index" and "/" - ASP.NET MVC3

我在 ASP.NET MVC3 网络应用程序中工作,我的问题如下:我想使用以下方法检测 URL 更改:

window.onhashchange = function (event) { 
    //some stuff...
};

并且它完美地工作...但是,它完美地工作,而在 url 中总是出现:

'localhost:[port]/Home/Index'

或者在某些情况下,url 更改为:

'localhost:[port]/Home/Index#'

当用户更改 url(例如,他删除“/Home/Index”)时,页面将重新加载(url 是 'localhost:[port]/') 但是当用户按下后退按钮并再次返回到 '/Home/Index' onhashchange 事件 没有检测到这种变化。为什么? '/Home/Index'和'/'是一样的吗?

散列是 url 中的# 符号之后出现的。

如果当前url是:

http://localhost:12345/Home/Index#chapter-1

并且有人点击 link 像这样:<a href="#chapter-2">Chapter 2</a> 然后 url 的散列部分将改变导致 window.onhashchange 被触发。导航到另一个页面不会触发 onhashchange 事件,因为哈希值在新页面上没有更改。

window.onhashchange = function(e) {
      var log = document.getElementById("log");

      log.innerText = "Event: Hash changed " + location.hash;

      window.setTimeout(function() {
        log.innerText = "Event: ";
      }, 3000);
    }
<div id="log">Event:</div>

<ul>
  <li><a href="#chapter1">Change hash to chapter 1</a></li>
  <li><a href="#chapter2">Change hash to chapter 2</a></li>
  <li><a href="#">Change hash to nothing</a></li>
  <li><a href="#" onclick="location.reload()">reload page</a></li>
</ul>