我想在所有使用JavaScript的瀏覽器中禁用撤銷和重做。我想這樣做,因爲我們的應用程序有它自己的撤消和重做歷史內置。在瀏覽器中禁用撤銷和重做
我已經可以處理按鍵來通過鍵盤輸入禁用撤消和重做,但我想禁用菜單項。 (標準菜單和右鍵菜單)
這可能嗎?即使只在某些瀏覽器中可能,它也會比沒有更好。
我想在所有使用JavaScript的瀏覽器中禁用撤銷和重做。我想這樣做,因爲我們的應用程序有它自己的撤消和重做歷史內置。在瀏覽器中禁用撤銷和重做
我已經可以處理按鍵來通過鍵盤輸入禁用撤消和重做,但我想禁用菜單項。 (標準菜單和右鍵菜單)
這可能嗎?即使只在某些瀏覽器中可能,它也會比沒有更好。
你可以做的一件事是攔截popstate事件。不幸的是我不認爲它可以被取消,所以你必須通過添加一個虛擬狀態來撤消它。
以下代碼阻止我在Chrome和FF上按下按鈕。隨意在其他瀏覽器上測試它。
window.setTimeout(function(){
window.history.pushState({}, '', '#');
window.addEventListener("popstate", function() {
window.history.pushState({}, '', '#');
});
},1000);
請務必根據自己的歷史情況更改您的代碼。 還可以考慮使用HTML5 History API而不是自己的歷史實現。
https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
我不相信這個問題是關於改變歷史狀態的問題,而是涉及到contentEditable元素中的撤銷/重做。 – IliasT
它使用瀏覽器的API是不可能的。但是有幾種方法可以檢測或處理方法。網址散列是處理回退或轉發事件的一種方式。但是瀏覽器不支持用戶安全。您可以搜索JavaScript網址散列腳本,但不要忘記與html5瀏覽器兼容的腳本。
我知道這是舊的,但對於其他人很好奇,這對我很有用。
$(window).bind('keydown', function(evt) {
if((evt.ctrlKey || evt.metaKey) && String.fromCharCode(evt.which).toLowerCase() == 'z') {
evt.preventDefault();
}
});
我就知道會來檢測磁場的變化,並檢查它不是由鍵盤輸入,剪切/粘貼,或自己的腳本引起的,則認爲它是撤消的唯一方法/重做功能,這樣做。據我所知,沒有工作事件處理程序來捕獲撤消/重做事件,所以(如果你真的需要它),這可能是唯一的選擇。 –