假設有三個頁面, start.html, 經過點擊start.html上的連接跳轉到 first.html, 而後點擊first.html上連接跳轉到 second.html, 那麼在history中記錄的歷史以下鏈表:javascript
以下代碼例子, 頁面跳轉均以 連接實現。php
start.htmlhtml
<html> <head> <style> </style> </head> <body> <a href="./first.html">go to first html</a> </body> </html>
first.htmljava
<html> <head> <style> </style> </head> <body> <a href="./second.html">go to second html</a> </body> </html>
second.html瀏覽器
<html> <head> <style> </style> </head> <body> here is second html </body> </html>
對於一種特殊場景, 此頁面用戶看完後, 不想讓用戶再看到, 例如特定頁面上,讓用戶選擇一個條件,此選擇是一次性的, 不能讓用戶屢次選擇, 點擊回退按鈕不顯示此頁面.post
使用 location.replace接口, 實現代碼以下, first.html頁面點擊鏈接後, 跳轉到second.html, first.html頁面在history中被second.html代替。測試
瀏覽到 first.html history記錄url
從first.html跳轉到 second.html後, history記錄spa
這樣, 當前顯示second,點擊回退按鈕, 回退到start頁面。code
實例代碼,其餘兩個不變。
first.html
<html> <head> <style> </style> </head> <body> <a id="go2scond" href="#" onclick="go2second();">go to second html</a> <script type="text/javascript"> function go2second() { location.replace("./second.html"); } </script> </body> </html>
若是某個頁面以前的頁面是一次性顯示, 對於用戶來講不能再被顯示, 例如當用戶選擇了因此後的內容後,在最後一步確認後, 不能再被修改, 用戶企圖經過瀏覽器回退按鈕從新查看以前的頁面, 這中條件下, 想法讓其失效。
history對象, 沒有提供清空以前瀏覽頁面的接口, 此需求能夠經過js腳本判斷實現:
例以下面demo, 用戶從start.html瀏覽到 first.html頁面,後瀏覽到second.html, 而後用戶點擊回退仍然顯示 second.html
修改first.html代碼以下
具體實現原理是, 在以前不能瀏覽頁面中的最後一一個頁面腳本中,添加history.forward(1), 讓其向後自動跳轉到後面一個頁面, 對於第一次訪問此頁面, 因爲沒有後面一個頁面, 因此不會執行, 當瀏覽到後一個頁面後, 這時此頁面在history中就有了後一個頁面, 經過後退按鈕, 當加載此頁面時候, 就會自動跳轉到後一個頁面。
<html> <head> <style> </style> </head> <body> <a href="./second.html">go to second html</a> <script> //HTML禁用回退上一瀏覽頁面按鈕 /* 加入有以上代碼的頁面沒法回退到它 例如A頁面有這段代碼,從A連接到B頁面,這時一旦在B頁面上按回退按鈕,則沒法回退到A頁面 */ if(window.history.forward(1) != null) { } </script> </body> </html>
瀏覽歷史(前進和後退),僅僅加載已經訪問過頁面的 URL, 若是其中有一個頁面是以 form 表單 post 方法提交後顯示的, 瀏覽歷史 也僅僅是加載 此頁面的url, 並不提交 post的數據。
刷新, 若是有個頁面是以提交數據顯示的, 則刷新會提示用戶,是否要重複提交數據:
demo測試代碼:
start.php form提交數據到 first.php
<html> <head> <style> </style> </head> <body> <form action="./first.php" method="post"> <input type="text" name="para" id="para" value="para" /> <input type="submit" value="submit" /> </form> </body> </html>
first.php是被提交數據後顯示的, 使用刷新則會提示是否要重複提交數據。點擊回退和前進, 都沒有重複提交數據提示。
<html> <head> <style> </style> </head> <body> <a href="./second.php">go to second html</a> </body> </html>
second.php
<html> <head> <style> </style> </head> <body> here is second html </body> </html>
經過改造, 在first.php中添加 302 跳轉, 直接跳轉到 second, 能夠避免 用戶看到數據提交的頁面 first.php, 同時嘗試前進和後退按鈕, 也不能瀏覽到first.php,說明在history中不會記錄跳轉的中間響應(從應用上也不會記錄, 由於若是記錄, 則回退按鈕則永遠不能回到start.php頁面, 給用戶帶來不便)。
<?php //重定向瀏覽器 header("Location: /replaceTest/second.php"); //確保重定向後,後續代碼不會被執行 exit; ?> <html> <head> <style> </style> </head> <body> <a href="./second.php">go to second html</a> </body> </html>
history中記錄的鏈表同replace