/page.html#A给定从到 的导航/page.html#B,有没有办法区分用户:
/page.html#A?我正在构建一个网络应用程序,其中单个页面在多个内容幻灯片之间进行转换,每个内容都由特定位置哈希标识,例如'#A', '#B'。
例如,当用户位于幻灯片“A”上并选择选项“B”时,位置将从 更改/page.html#A为/page.html#B。
转换后,location.hash==#B、 和back()(通过 JS 或浏览器按钮)将使用户返回到location.hash==#A。
但是,没有什么可以阻止用户手动更改 URL 栏中的哈希值。在这种情况下,浏览器会认为这是向前导航,插入/page.html#B后退历史记录。也就是说,导航历史记录将是#A>> #B,#A并且单击返回现在会将用户带到#B。
我需要区分这两种情况,以便当我知道用户已手动更新 url 哈希时,我可以触发go(N)同步浏览器后退/下一个状态。
1)HTML5popstate事件:
我曾希望html5 popstate事件(https://developer.mozilla.org/en-US/docs/Web/Events/popstate)只会在case#1中被触发,但我可以确认它在这两种情况下都会发生火灾。
2)浏览器.onhashchange事件
我可以确认,如果存在,该事件在两种情况下都会被触发
hashChange()
3)我可以确认jQuery mobile在这两种情况下都会被触发
4)读取浏览器导航历史记录
我的下一个想法是维护一个哈希历史记录的JS数组,并比较新的哈希值和浏览器历史记录是否与JS数组匹配,但是出于安全原因JS无法读取浏览器位置历史记录。
我知道如果我调用 window.history.forward(),并且不存在页面,则不会发生任何事情。我正在考虑哈希历史记录的JS数组,调用forward(),检查新的location.hash(现在安全性允许),与JS数组进行比较,然后调用go(N)来同步浏览器后退/下一个状态。但有点乱。