【问题标题】:Detect an URL change in a SPA检测 SPA 中的 URL 更改
【发布时间】:2019-04-17 14:45:55
【问题描述】:

我想听听不是由我维护的 SPA 中的路径变化。

我在这里找到了一种解决方案:https://stackoverflow.com/a/44819548/7042552

但对我来说,这似乎有点“hacky”——但我的实现仍然是这样的:

let url = window.location.href;

['click','popstate', 'onload'].forEach( evt =>
        window.addEventListener(evt, function () {
            requestAnimationFrame(()=>{
                if (url !== location.href) {
                    // do stuff
                }
                url = location.href;
            });
        }, true)
    );

是否有更好或更通用的方法来监听 SPA 中的页面加载?

【问题讨论】:

标签: javascript dom-events single-page-application


【解决方案1】:

https://stackoverflow.com/a/41825103/7042552 为我完成了这项工作,令人难以置信的是,我们在 2018 年仍然必须使用这些黑客。

【讨论】:

    【解决方案2】:

    现在大多数浏览器都支持MutationObserver,您可以使用这样的代码来检测 SPA 中的 URL 更改:

    let previousUrl = '';
    const observer = new MutationObserver(function(mutations) {
      if (location.href !== previousUrl) {
          previousUrl = location.href;
          console.log(`URL changed to ${location.href}`);
        }
    });
    const config = {subtree: true, childList: true};
    observer.observe(document, config);
    

    【讨论】:

    • 据我所知,这行不通? stackoverflow.com/a/32158577/1540547
    • @jorgen 它有效,您是否有更多关于您尝试时无效的详细信息?
    • 您好!当我尝试它只是没有触发 URL 更改。不过我并没有深入研究,因为我在阅读上述链接后认为它不起作用,所以我可能错了。
    • 你模仿了mutationObserver.observe(target, options) - 所以你的观察者不起作用
    猜你喜欢
    • 2016-10-07
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2021-02-01
    相关资源
    最近更新 更多