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