2013-05-16 2 views
5

Я хотел бы отключить отмену и повторную загрузку во всех браузерах с помощью JavaScript. Я хочу сделать это, так как наше приложение имеет собственную историю отмены и повторения истории.Отключить отменить и повторить в браузерах

Я уже могу обрабатывать нажатия клавиш, чтобы отключить отмену и повторную запись с помощью ввода клавиатуры, но я также хотел бы отключить элементы меню. (Стандартное меню и меню правой кнопки мыши)

Возможно ли это? Даже если это возможно только в некоторых браузерах, это будет лучше, чем никто.

+1

Единственный способ я знаю, было бы обнаружить изменение в поле и проверить, если она не была вызвана вводом с клавиатуры, вырезать/вставить, или собственные сценарии, то предположим, что это был откат/redo, которая сделала это. Насколько мне известно, нет обработчика рабочих событий, чтобы ловить события отмены/повтора, поэтому (если вам это действительно нужно) это может быть единственным вариантом. –

ответ

2

Одна вещь, которую вы можете сделать, это перехватить событие popstate. К сожалению, я не думаю, что его можно отменить, поэтому вам нужно немного взломать его, добавив фиктивное состояние для отмены.

Следующий код не позволил мне вернуться к Chrome и FF. Не стесняйтесь тестировать его в других браузерах.

window.setTimeout(function(){ 
    window.history.pushState({}, '', '#'); 
    window.addEventListener("popstate", function() { 
    window.history.pushState({}, '', '#'); 
    }); 
},1000); 

Обязательно измените свой код в соответствии с его собственной историей. Также рассмотрите возможность использования API истории HTML5 вместо собственной реализации истории.

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

+0

Я не верю, что этот вопрос задает вопрос об изменении состояния истории, а скорее относится к отмене/повторению в элементе contentEditable. – IliasT

0

не представляется возможным с помощью API браузера. но существует несколько способов обнаружения или обработки методов. хеширование URL - это один из способов обработки назад или вперед события. однако браузеры не поддерживают это для безопасности пользователя. вы можете искать скрипты хэширования URL-адресов javascript, но не забывайте об этих скриптах, совместимых с html5-браузерами.

3

Я знаю, что это старо, но для других, которые любопытны, это сработало для меня.

$(window).bind('keydown', function(evt) { 
    if((evt.ctrlKey || evt.metaKey) && String.fromCharCode(evt.which).toLowerCase() == 'z') { 
    evt.preventDefault(); 
    } 
}); 
+1

Это действительно «отключает пункты меню (стандартное меню и меню правой кнопки мыши)»? то есть он блокирует параметр «Отменить» в контекстном меню правой кнопки мыши? – Zeek

+0

Да, вы также, вероятно, также хотите отключить контекстное меню. Тем не менее, мне все же интересно узнать, как прекратить распространение события, когда пользователь перейдет в меню Edit -> Undo меню приложения? – IliasT

Смежные вопросы