3 回答

TA貢獻1777條經驗 獲得超10個贊
document.referrer返回用戶上次訪問的頁面的 URL(除非您的頁面是直接使用 URL 欄訪問的)
使用此的示例:
function goBack() {
if(document.referrer.includes(window.location.host)){
window.history.back();
}
}
該函數includes只是根據一個字符串是否包含另一個字符串返回一個布爾值。
window.location.host是頁面的當前主機名和任何關聯的端口。

TA貢獻1825條經驗 獲得超4個贊
我想不出任何很好的解決方案來解決你的問題 - 這可能是不可能的(或者我只是知道得不夠)。
但是,有一種解決方法在您的應用程序中實施可能會困難,也可能不困難,具體取決于多種因素。歷史記錄 API允許您進行已經發現的瀏覽器導航。訣竅是利用它在瀏覽器歷史記錄中的每個點保存狀態的能力。
如果每當用戶導航到應用程序的不同部分時,您都使用History.pushState()實現導航,并向每個導航添加類似的狀態{allowBackNav:true}
,那么每當用戶單擊向后導航按鈕時,您都可以確保allowBackNav在允許該操作之前,將歷史記錄的狀態設置為 true。除了用戶第一次加載您的應用程序時之外,歷史上的每個時刻都會設置此狀態。
如果用戶通過受控的history.pushState() 之外的任何其他方式(例如通過鏈接)導航到應用程序的一部分,則該系統將會崩潰。
這是一個完整的工作示例。
<html>
? <body>
? ? <button id="back" onClick="back()" disabled>Back</button>
? ? <button onClick="choose('A')">Option A</button>
? ? <button onClick="choose('B')">Option B</button>
? ? <button onClick="choose('C')">Option C</button>
? ? <p id="option"></p>
? ? <script>
window.back = function() {
? history.back()
}
window.choose = function(option) {
? history.pushState({allowBackNav: true}, '', `?option=${option}`)
? updateUI()
}
function updateUI() {
? const currentOption = new URL(window.location.href).searchParams.get('option')
? document.getElementById('option').innerText = currentOption ? `Selected: ${currentOption}` : ''
? document.getElementById('back').disabled = !(history.state && history.state.allowBackNav)
}
updateUI()
window.addEventListener('popstate', event => {
? updateUI()
})
? ? </script>
? </body>
</html>

TA貢獻1789條經驗 獲得超8個贊
每次路由更改時,您都可以將 URL 保存在窗口對象的歷史狀態中。在你的情況下,如果你只保存主機名而不是完整的 URL 就可以了。像這樣 :
window.history.pushState({ prevUrl: window.location.host }, null, "/new/path/in/your/app");
您可以編寫一個自定義函數,該函數將在單擊時調用:
goBack(){
? if(window.history.state && window.history.state.prevUrl){
? ? let url = window.history.state.prevUrl;
? ? //check if the url matches with the your applications host name
? ? ?if(url == 'hostName'){
? ? ? ? ?history.goBack();
? ? ?}
? ? }
}
添加回答
舉報