解決辦法:
document.referrer?location.href=document.referrer:history.back();
為什麼會存在需要判斷的情況呢,因為referrer是存在擷取不到的可能性的。一般正常流程是沒有問題的。往下面看,就知道了。
接下來是原因:
H5開發實際過程中:我們在送出了表單之後,很多需要傳回清單頁面,一般情況是使用:
history.go(-1);
//或者
history.back();
但是,會造成清單頁面不會重新整理,新送出或者修改的資料不會顯示的問題
很多網上資料說使用:
location.reload();
來進行重新整理,可能在pc端是正常可以使用的,但是h5頁面是不可用的
接下來介紹一下:
location.href=document.referrer;
javascript 有一個可以擷取前一頁面的URL位址的方法:document.referrer
document.referrer 的來源
- referrer 屬性可傳回載入目前文檔的文檔的 URL【摘自W3CSHCOOL】, 如果目前文檔不是通過超連結通路的,那麼目前文檔的URL為NULL,這個屬性允許用戶端的 javascript 通路 HTTP 頭部;
- referrer 屬性,我們可以從 http 頭部擷取
document.referrer 的相容性
document.referrer IE7都支援,它的相容性比較高,Android 5.0開始支援,iOS都支援,PC端浏覽器從IE7就開始支援了,相容性沒有什麼大的問題。
但是有個小小的問題,就是 IE 會主動清除 referref 屬性。在IE中用javascript做跳轉,比如用window.location.href = “”; google如果使用document.referrer無法取到浏覽器請求的HTTP referrer,因為IE清空了。而其他主流浏覽器Firefox和Chrome都會保留referrer,沒辦法,隻好判斷,如果是IE浏覽器,就主動給它增加一個 referrer 。這樣的原理就是給IE浏覽器的頁面偷偷加了個連結,然後自動點這個連結,于是referrer就能保留了。
無法擷取 referrer 資訊的情況
下面的場景無法獲得 referrer 資訊,以下前8條屬于【張鑫旭】:
- 直接在浏覽器中輸入位址
- 使用
重新整理(location.reload()
或者location.href
重新整理有資訊)location.replace()
- 在微信對話框中,點選進入微信自身浏覽器
- 掃碼進入微信或QQ的浏覽器
- 直接新視窗打開一個頁面
- 從https的網站直接進入一個http協定的網站(Chrome下親測)
-
标簽設定a
(相容IE7+)rel="noreferrer"
-
标簽來控制不讓浏覽器發送meta
referer
- 點選 flash 内部連結
- Chrome4.0以下,IE 5.5+以下傳回空的字元串
- 使用 修改 Location 進行頁面導航的方法,會導緻在IE下丢失 referrer,這可能是IE的一個BUG
- 跨域