检测Firefox和Windows IE Edge中哈希URL上浏览器端滚动重新定位的JavaScript事件

检测Firefox和Windows IE Edge中哈希URL上浏览器端滚动重新定位的JavaScript事件,javascript,html,jquery,jquery-events,Javascript,Html,Jquery,Jquery Events,在尝试调整一些滚动脚本以在某些页面上执行“跳转到”链接时,我注意到,如果您有一个URL中包含哈希标记的页面,则在加载页面后,当您在地址栏上按enter键时,其行为会因浏览器而异 例如,如果您加载一个URL中带有has的页面,然后滚动到目标元素之外,我注意到在Firefox和IE上,如果您将光标放在地址栏上并按enter键,页面将移回具有与hashtag相同的id属性的HTML元素,但是页面不会被重新加载 我还注意到,在这种场景中,popstate和hashchange事件都不会被触发。scrol

在尝试调整一些滚动脚本以在某些页面上执行“跳转到”链接时,我注意到,如果您有一个URL中包含哈希标记的页面,则在加载页面后,当您在地址栏上按enter键时,其行为会因浏览器而异

例如,如果您加载一个URL中带有has的页面,然后滚动到目标元素之外,我注意到在Firefox和IE上,如果您将光标放在地址栏上并按enter键,页面将移回具有与hashtag相同的
id
属性的HTML元素,但是页面不会被重新加载

我还注意到,在这种场景中,
popstate
hashchange
事件都不会被触发。
scroll
事件很可能会被触发,但我们怎么知道这不是用户滚动而是浏览器重置其位置

浏览器中是否存在检测此类事件的was?鉴于这是在视口之外,我有点好奇。但我有一个场景,我想重新定位菜单,这取决于页面是否向上或向下滚动

试着解释一下我在寻找什么:

  • 带有标签
    #test
    和元素
  • 按F5,页面位置本身就在
    所在的位置
  • 上下滚动
  • 在地址栏上按enter键
  • ----查找事件以检测以前的操作---
  • 页面位置本身 就在
    所在的位置
  • JSBin中的示例(在Firefox中打开):

    输出:

  • 在Firefox中打开您的控制台
  • 确保在Firefox设置中启用“持久日志”,以便在页面重新加载后保留日志
  • 按F5(您应该会看到控制台消息“重新加载”)
  • 现在尝试移动页面,将光标放在地址栏中,然后按enter键
  • 您将看到页面没有重新加载
  • 我们如何检测这些事件(滚动事件除外)


    如果要复制,请确保在Windows上使用Firefox。看起来其他操作系统也有其他行为。

    鉴于缺乏答案,我的假设答案是

    使用URL和地址栏中的片段标识符(aka
    hash
    )无法检测浏览器的重新定位

    除此之外,浏览器似乎有不一致的行为:

  • Linux上的Firefox与Windows上的Firefox行为不同(它会重新加载页面)
  • Chrome似乎忽略了重新定位,除非页面的位置在卸载前被设置回顶部位置
  • 对于正常行为是重新加载还是重新定位,浏览器之间似乎没有标准

  • 检测片段标识符重新定位的唯一安全方法是加载页面时。

    有滚动事件,如果是可聚焦的elm被片段击中,可能会触发onfocus。好了,没有内置的通用导航事件。@NicolasBouvrette如果您的代码进行滚动,当然您应该知道代码中的位置,否则滚动的一定是用户。@guest271314,正如我试图解释的,这似乎是Firefox和IE的行为。当您在URL中包含哈希的页面上时,加载页面后,如果您在该页面上滚动并返回地址栏并按enter键,浏览器将重新定位页面而不重新加载。让我更新这个问题,试图澄清这一点。@guest271314我想Windows有了不同的行为,变量在我这边没有增加。在这里找到移动证据:@guest271314感谢您的尝试-我怀疑对我的答案是否有任何回应。我只是想确认一下:)