像YouTube这样的网站使用什么来更改网址而不会激活popstate或者之前的版本?

For*_*vin 5 javascript youtube javascript-events navigationbar

我注意到,当您点击其网站上的链接/视频时,YouTube实际上并未重新加载.如果您在控制台中定义一个变量,您将看到它将保持不变.

但既popstate不会也不会beforeunload被解雇.那么Youtube是如何实现这一目标的呢?如何在不定时检查URL栏的情况下检测该URL更改.

window.onpopstate = function(event) {
  console.log('popstate test!')
  return "test"
}

window.onbeforeunload = function(event) {
  console.log('beforeunload test!')
  return "test"
}
Run Code Online (Sandbox Code Playgroud)

我不只是在寻找YouTube解决方案,我正在寻找涵盖YouTube正在使用的技术的通用解决方案.

Nob*_*tak 2

他们正在使用onpopstate. 将 JavaScript 粘贴到 JavaScript 控制台中,单击视频,然后单击“后退”按钮。您现在应该看到“popstate test!” 在控制台中。

这里真正的问题是没有onpushstate事件,但这个人似乎已经实现了它之前的 StackOverflow也有一个关于它的问题。然而,这似乎不适用于 YouTube,也许是因为他们正在尝试编辑pushState的属性history,但 YouTube 实际上存储history.pushState在单独的变量中,因此不受此代码的影响。

然而,这个仅针对 YouTube 的元素transitionend上的事件#progress似乎有效。