亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用history.goBack()時,如何確保只返回應用程序內的頁面?

使用history.goBack()時,如何確保只返回應用程序內的頁面?

POPMUISE 2023-07-29 16:25:05
在 Reactjs 中,我正在編寫一個函數組件,其中包含一個如下所示的按鈕:<button onClick = {() =>history.goBack()}>   Go Back  </button>我需要確保單擊按鈕時,僅當上一頁位于應用程序內時才返回,我該如何實現?非常感謝您的幫助!
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

document.referrer返回用戶上次訪問的頁面的 URL(除非您的頁面是直接使用 URL 欄訪問的)


使用此的示例:


function goBack() {

    if(document.referrer.includes(window.location.host)){

        window.history.back();

    }

}

該函數includes只是根據一個字符串是否包含另一個字符串返回一個布爾值。


window.location.host是頁面的當前主機名和任何關聯的端口。


查看完整回答
反對 回復 2023-07-29
?
鳳凰求蠱

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>


查看完整回答
反對 回復 2023-07-29
?
拉丁的傳說

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();

? ? ?}

? ? }

}

查看完整回答
反對 回復 2023-07-29
  • 3 回答
  • 0 關注
  • 240 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號