检查javascript中的URL是否已更改(无法使用hashChanged)

检查javascript中的URL是否已更改(无法使用hashChanged),javascript,jquery,Javascript,Jquery,我已经研究了很多问题,但我找不到一个在我的环境中运行良好的解决方案。这是在Shopify中完成的,我有一个带有变体的产品。更改变体时,URL会附加产品ID,该ID会动态更改产品价格(无重新加载) 我有一个额外的检测条,当这种变化发生时,我可以做一些额外的东西,目前,它确实检测到了,但它看起来像是浪费了电力,我走了这条路 $(document).ready(function() { setInterval(function() { checkURLchange(window.l

我已经研究了很多问题,但我找不到一个在我的环境中运行良好的解决方案。这是在Shopify中完成的,我有一个带有变体的产品。更改变体时,URL会附加产品ID,该ID会动态更改产品价格(无重新加载)

我有一个额外的检测条,当这种变化发生时,我可以做一些额外的东西,目前,它确实检测到了,但它看起来像是浪费了电力,我走了这条路

$(document).ready(function() {
    setInterval(function() {
      checkURLchange(window.location.href);
    }, 10);
它每10毫秒发生一次,因此对用户来说更改似乎是即时的(比如说我在页面上添加了一张新图片或其他关于变体更改的内容)

如果我可以保存URL的状态并检查它是否已更改,这将更加有效,但我仍然不知道如何处理此问题

Windows的典型hashChanged事件在这种情况下不起作用,因为url更改不使用哈希(Shopify),而是看起来像这样:

?variant=99390743207991

popstate(历史变化)怎么样?

不幸的是,这似乎也不起作用。正如国家或答案所暗示的那样


请随意查看在我的混乱暂存环境中测试的解决方案:

请收听
窗口
中的
popstate

window.addEventListener('popstate', () => {
    /* do something */
})

您可以通过向其添加控制台日志并使用
window.location.hash='somehash'

更改哈希来测试此问题。您可以使用此事件检测URL历史记录中的更改。是否尝试过?此解决方案的可能副本对我也不起作用。我在事件侦听器中添加了变量,当我更改变量时(反过来附加URL),事件从未触发,但显式地将控制台中的哈希设置为test会触发它。当附加此URL时,不会重新加载任何内容。我的印象是popstate/histroy对于导航(新页面/散列等)是有效的。
window.addEventListener('popstate', () => {
    /* do something */
})