達(dá)令說(shuō)
2019-08-19 14:58:09
window.location.href更改時(shí)的事件我正在為一個(gè)網(wǎng)站編寫Greasemonkey腳本,該腳本在某些時(shí)候會(huì)修改location.href。如何在頁(yè)面上進(jìn)行更改window.addEventListener時(shí)獲得事件(通過(guò)或類似的東西)window.location.href?我還需要訪問(wèn)指向新/修改的URL的文檔的DOM。我已經(jīng)看到了其他涉及超時(shí)和輪詢的解決方案,但我想盡可能避免這種情況。
3 回答

SMILET
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
當(dāng)活動(dòng)歷史記錄條目更改時(shí),將觸發(fā)popstate事件。[...] popstate事件只能通過(guò)執(zhí)行瀏覽器操作來(lái)觸發(fā),例如單擊后退按鈕(或在JavaScript中調(diào)用history.back())
因此,在使用時(shí)收聽(tīng)popstate
事件并發(fā)送popstate
事件history.pushState()
應(yīng)該足以對(duì)href
變更采取行動(dòng):
window.addEventListener('popstate', listener);const pushUrl = (href) => { history.pushState({}, '', href); window.dispatchEvent(new Event('popstate'));};

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
您無(wú)法避免輪詢,href更改沒(méi)有任何事件。
如果你不過(guò)分,使用間隔是相當(dāng)輕的。如果你擔(dān)心的話,每50ms左右檢查一次href對(duì)性能沒(méi)有任何重大影響。
添加回答
舉報(bào)
0/150
提交
取消