[英]Trying to disable the browser's back button
我寫了兩個 HTML 文件:
<a href = "Home.html">Next Page</a>
<html> <body> <a href = >Login.html>>Prev Page</a> </body> <script type = "text/javascript" > history.pushState("anything", "", "#1"); window.onhashchange = function (event) { window.location.hash = "a"; }; </script> </html>
` 我正在嘗試禁用瀏覽器的后退按鈕。 如果我在 chrome 上執行此代碼,它不會禁用后退按鈕,但如果我在 Home.html 頁面的控制台中運行history.state
命令,然后單擊后退按鈕,則它會保留在同一頁面上(按預期工作)。 為什么這樣?
FOA,感謝大家的回答。
最后下面的代碼給了我解決方案:
history.pushState(null, null, window.location.href); history.back(); window.onpopstate = () => history.forward();
您無法禁用瀏覽器的后退按鈕。 如果可以,那將是一個安全隱患,瀏覽器供應商很可能會尋求修復它。
覆蓋網絡瀏覽器的默認行為通常是一個壞主意。 出於安全原因,客戶端腳本沒有足夠的權限來執行此操作。
也很少有人問類似的問題,
如何防止退格鍵返回?
如何使用 JavaScript 阻止瀏覽器對退格按鈕的默認歷史后退動作?
您實際上無法禁用瀏覽器后退按鈕。 但是,您可以使用您的邏輯來實現魔術,以防止用戶導航回來,這會產生一種像被禁用的印象。 這是方法,請查看以下代碼段。
(function (global) {
if(typeof (global) === "undefined") {
throw new Error("window is undefined");
}
var _hash = "!";
var noBackPlease = function () {
global.location.href += "#";
// making sure we have the fruit available for juice (^__^)
global.setTimeout(function () {
global.location.href += "!";
}, 50);
};
global.onhashchange = function () {
if (global.location.hash !== _hash) {
global.location.hash = _hash;
}
};
global.onload = function () {
noBackPlease();
// disables backspace on page except on input fields and textarea..
document.body.onkeydown = function (e) {
var elm = e.target.nodeName.toLowerCase();
if (e.which === 8 && (elm !== 'input' && elm !== 'textarea')) {
e.preventDefault();
}
// stopping event bubbling up the DOM tree..
e.stopPropagation();
};
}
})(window);
這是純 JavaScript 編寫的,因此可以在大多數瀏覽器中使用。 它也會禁用退格鍵,但鍵將在輸入字段和文本區域內正常工作。
推薦設置:將此代碼段放在單獨的腳本中,並將其包含在您希望此行為的頁面上。 在當前設置中,它將執行 DOM 的 onload 事件,這是此代碼的理想入口點。
Working Demo link-> http://output.jsbin.com/yaqaho
HTML5 History API 使開發人員能夠在不刷新整個頁面的情況下修改網站的 URL。 這對於用 JavaScript 加載頁面的某些部分特別有用,這樣內容就明顯不同並且需要一個新的 URL。
您可以查看此鏈接它可能會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.