History:replaceState() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

History 介面的 replaceState() 方法會修改當前歷史記錄條目,用方法引數中傳遞的 state 物件和 URL 替換它。當您想在響應某些使用者操作時更新當前歷史記錄條目的 state 物件或 URL 時,此方法特別有用。

語法

js
replaceState(state, unused)
replaceState(state, unused, url)

引數

state

與傳遞給 replaceState() 方法的歷史記錄條目關聯的物件。state 物件可以為 null

unused

此引數出於歷史原因而存在,不可省略;傳遞空字串是傳統的做法,並且可以保證在未來的方法更改中是安全的。

url 可選

歷史記錄條目的 URL。新 URL 必須與當前 URL 同源;否則,replaceState() 方法將丟擲異常。

返回值

無(undefined)。

異常

SecurityError DOMException

如果關聯的文件未完全啟用,或者提供的 url 引數不是有效 URL,或者方法呼叫過於頻繁,則會丟擲此異常。

DataCloneError DOMException

如果提供的 state 引數不可序列化,則會丟擲此異常。

示例

假設 https://www.mozilla.org/foo.html 執行了以下 JavaScript

js
const stateObj = { foo: "bar" };
history.pushState(stateObj, "", "bar.html");

在下一個頁面上,您可以使用 history.state 來訪問剛剛新增的 stateObj

上述這兩行的解釋可以在 Working with the History API 文章中找到。然後假設 https://www.mozilla.org/bar.html 執行了以下 JavaScript

js
history.replaceState(stateObj, "", "bar2.html");

這將導致 URL 欄顯示 https://www.mozilla.org/bar2.html,但瀏覽器不會載入 bar2.html,甚至不會檢查 bar2.html 是否存在。

現在假設使用者導航到 https://www.microsoft.com,然後點選“後退”按鈕。此時,URL 欄將顯示 https://www.mozilla.org/bar2.html。如果使用者現在再次點選“後退”,URL 欄將顯示 https://www.mozilla.org/foo.html,並完全跳過 bar.html。

規範

規範
HTML
# dom-history-replacestate-dev

瀏覽器相容性