在浏览器中禁用撤消和重做

问题描述 投票:0回答:4

我想在所有使用 JavaScript 的浏览器中禁用撤消和重做。我想这样做,因为我们的应用程序有自己的内置撤消和重做历史记录。

我已经可以通过键盘输入处理按键来禁用撤消和重做,但我也想禁用菜单项。 (标准菜单和右键菜单)

这可能吗?即使仅在某些浏览器中可行,也比没有好。

javascript cross-browser undo-redo
4个回答
4
投票

我知道这已经过时了,但对于其他好奇的人来说,这对我有用。

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

1
投票

您可以做的一件事是拦截 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/Manipulated_the_browser_history


0
投票

无法使用浏览器 API。但有几种检测方法或处理方法。 url 哈希是处理后退或前进事件的一种方法。然而,为了用户安全,浏览器不支持这一点。您可以搜索 javascript url 哈希脚本,但不要忘记与 html5 浏览器兼容的脚本。


0
投票

使用我的库undo.js,您可以使用以下代码禁用撤消和重做操作(不仅仅是通过快捷方式):

undo.observe(document.body, {
    preventDefault:true
});

然后,您可以使用以下方法捕获用户的撤消和重做操作请求(使用快捷方式或浏览器菜单):

myeditor.addEventListener("undo", function(e){
    // whatever...
});
myeditor.addEventListener("redo", function(e){
    // whatever...
});
© www.soinside.com 2019 - 2024. All rights reserved.