2016-07-29 115 views
4

當URL的任何部分發生更改時是否會觸發事件?URL更改時是否觸發事件

檢測到URL的變化已被問了很多次,但一般的答案已過時(〜2010)。

現有的答案摘要:

  • 您可以使用popstate對於某些情況(它確實火爲URL的變化)。

  • 當頁面正在導航(並卸載其資源)時,您可以使用onbeforeunload

  • 您可以使用hashchange事件來觀察散列碎片更改。

  • 否則,似乎傳統的答案仍然是民意調查改變window.location。

輪詢還在最好的解決辦法?令人驚訝的是,鑑於location及其API中的其他進步,沒有發生此事件,所以這就是我發佈此問題的原因。

+0

不,對於每一個變化不常見的事件,但你可以根據其他事件創建一個。 – adeneo

+0

@adeneo - 你指的是哪些事件?目前,我正在嘗試檢測您在視頻之間導航時在YouTube上發生的網址更改。 –

+0

我認爲使用popstate是最好的解決方案,也是很好的支持。有什麼具體的要求,爲什麼你不想使用它? – Wolfgang

回答

1

事件中使用history.pushState()時,應該足以承擔HREF變化採取行動:

window.addEventListener('popstate', listener); 

const pushUrl = (href) => { 
    history.pushState({}, '', href); 
    window.dispatchEvent(new Event('popstate')); 
};