Skip to content

监听 URL 状态变化

要监听URL的状态更改(即在URL的哈希部分中的更改),可以使用 window.onhashchange 事件。

例如,下面的代码将向 window 对象添加一个事件侦听器,该侦听器将在 URL 的哈希部分更改时被调用:

js
window.addEventListener("hashchange", function() {
  console.log("URL的哈希部分已更改为:" + window.location.hash);
});

在上面的示例中,当 hashchange 事件触发时,回调函数将被调用。此回调函数将日志记录哈希部分中的新 URL。

您还可以通过检查 window.location.hash 来获取当前哈希部分的值。例如,您可以在页面加载时初始化应用程序状态,并在 hashchange 事件发生时根据 URL 的哈希部分更新状态。

javascriptCopy code

js
// 获取当前URL哈希部分的值
var currentHash = window.location.hash;

// 在页面加载时初始化应用程序状态
if (currentHash === "#home") {
  // 初始化应用程序状态为“主页”
} else if (currentHash === "#about") {
  // 初始化应用程序状态为“关于”
}

// 监听URL哈希部分更改的事件
window.addEventListener("hashchange", function() {
  var newHash = window.location.hash;
  if (newHash === "#home") {
    // 更新应用程序状态为“主页”
  } else if (newHash === "#about") {
    // 更新应用程序状态为“关于”
  }
});

请注意,如果URL中的哈希部分更改,但未触发 hashchange 事件,则可能是因为更改的哈希部分与当前哈希部分相同。在这种情况下,您可以手动触发 hashchange 事件,如下所示:

js
window.location.hash = "#new-hash"; // 设置新的哈希部分
window.dispatchEvent(new Event("hashchange")); // 手动触发“hashchange”事件

解析 hash query

JavaScript中解析URL中的哈希查询参数(hash query)可以使用以下方法:

js
// 获取URL中的哈希查询参数
const hashParams = new URLSearchParams(window.location.hash.substring(1));

// 获取某个参数的值
const paramValue = hashParams.get('paramName');

// 遍历所有参数
hashParams.forEach(function(value, key) {
  console.log(key, value);
});