鍍金池/ 問答/HTML5  HTML/ history.replaceState/pushState改變url,但是地址

history.replaceState/pushState改變url,但是地址欄沒有改變問題

現(xiàn)在公司有一個(gè)項(xiàng)目,有一個(gè)需求,當(dāng)從外部網(wǎng)址登錄進(jìn)來之后,會(huì)自動(dòng)重定向到home頁,如下:
http://localhost:8889/?sessionId=4724-3551655957868--736132069sh#!/app/home,然后需要將之前提前保存的目的網(wǎng)址(如目的網(wǎng)址是 dashboard頁)取出,重定向到目的網(wǎng)址,如window.location.href="http://localhost:8889/app/dashboard"?,F(xiàn)在要求,網(wǎng)址中必須不包含sessionId。重定向到dashboard頁之后,此時(shí)網(wǎng)址是http://localhost:8889/#!/app/dashboard,正常,沒有sessionId;但是當(dāng)用戶點(diǎn)擊瀏覽器回退按鈕時(shí),回退到home頁,此時(shí)網(wǎng)址為http://localhost:8889/?sessionId=4724-3551655957868--736132069sh#!/app/home。為了解決回退到home頁時(shí)網(wǎng)址中,存在session的問題。

我目前的思路是當(dāng)用戶從登錄頁重定向到home頁時(shí),利用history對(duì)象的window.history.replaceState({},'','http://localhost:8889/#!/app/home'),改變當(dāng)前路徑的url為http://localhost:8889/#!/app/home,這樣當(dāng)用戶從dashboard頁點(diǎn)擊瀏覽器回退按鈕時(shí),網(wǎng)址中就不再包含session。

但是,問題時(shí),我才用上述操作之后,連跳轉(zhuǎn)到dashboard頁,也變?yōu)榱?code>http://localhost:8889/?sessionId=4724-3551655957868--736132069sh#!/app/dashboard。我很納悶,為什么在修改了 瀏覽器歷史清單 之后,地址欄沒有發(fā)生相應(yīng)的改變。
有知道的同學(xué),麻煩指點(diǎn)下,謝謝!

回答
編輯回答
巫婆

今天找到了另外一個(gè)API,window.location.replace,可以解決上述問題,效果很好 @array_huang ,具體鏈接在 這里

2018年1月11日 00:25
編輯回答
負(fù)我心

看最后http://localhost:8889/?sessionId=4724-3551655957868--736132069sh#!/app/dashboard這個(gè)結(jié)果,我估計(jì)是跟你用的是hashtag(#)的模式有關(guān),如果你用的是普通的路徑http://localhost:8889/app/home估計(jì)就沒有問題了。

你的思路沒有錯(cuò),大概是window.history.replaceState不能這么用,這得查查MDN了。

2017年2月22日 07:17