Vanilla JS:完全禁用网页中的“保存”功能

时间:2018-10-21 13:37:59

标签: javascript events dom return keyboard-shortcuts

假设我是一名初级Wikipedia用户,只想尝试使用Wiki文本编辑器在编辑页面中更改某些Wikipedian内容,但不以任何方式保存更改(即使没有错误),因此寻求通过原始JavaScript阻止任何保存功能的方法。

如果我在希伯来语维基百科中搜索edit-page,可以通过鼠标单击“保存页面”按钮(illustration)来保存或发布页面,可以使用以下方法将其从DOM中删除:

document.querySelector("#wpSave").remove();

但是,假设我仍然可以通过 alt + shift + s 保存或发布内容,并且我也想防止这种可能的保存行为;我为此尝试了以下代码:

// ==UserScript==
// @name         wiki
// @match        https://*.wikipedia.org/*
// ==/UserScript==

document.addEventListener("DOMContentLoaded", ()=>{
    document.addEventListener('keypress', function(e) {
        if (e.key == 16 && e.key == 18 && e.key == 83) {
            return false;
        }
    });
});

代码失败(控制台中没有特殊错误)。为什么失败了?

4 个答案:

答案 0 :(得分:1)

keyCodes均表示修饰键。 keypress事件无法使用以下键触发:

    document.addEventListener('keypress', function(e) {
    console.log('keypress worked');
    });

    document.addEventListener('keyup', function(e) {
    console.log('keyup worked');
    });

此外,请注意,.keyCode已过时。应该使用.key

答案 1 :(得分:1)

您的问题中有很多问题:

  • event.keyevent.keyCode不同,请参阅documentation
  • e.key == 16 && e.key == 18 && e.key == 83永远不会正确。
  • 从事件监听器返回false不会阻止事件传播。

您可以通过以下方式来实现您的目标:

document.addEventListener("keypress", evt => {
  // refer to https://stackoverflow.com/a/2878005/8746648
  if(evt.altKey && evt.key == "S") {
    alert("prevent this message");
    evt.preventDefault();
  }
});

// refer to https://stackoverflow.com/a/35611393/8746648
document.addEventListener("keypress", evt => {
  if(evt.altKey && evt.key == "S") {
    evt.stopPropagation();
  }
}, true);

  1. 在第二个事件侦听器中通知true
  2. 请注意,evt.key与大写字母“ s”进行了比较。
  3. 如果事件侦听器已在捕获阶段中注册,则无法阻止其运行。 (了解捕获和blobing阶段here)。

答案 2 :(得分:0)

如果您可以单击“保存”按钮后知道调用哪种方法,则以下方法可能会有所帮助:

我建议的方法是按f12键,然后单击“保存”按钮以找到保存方法。现在,完成dom的加载(在您的代码中)后,您必须将获得的函数替换为一个空函数,如下所示:

FOUNDEDSaveFunc = function(){};

如果单击保存按钮导致刷新,则可以使用fiddler之类的某些应用来获得所谓的操作(而不是按f12键)。


此外,document.addEventListener将新的侦听器添加到当前现有的侦听器中。因此,处理按键的主要功能和您添加的功能将同时运行(在这种情况下仍将调用原始保存功能)。

答案 3 :(得分:-1)

Onclick可以阻止默认操作。

document.addEventListener('keypress', function(e) {
    if (event.keyCode == 16 && event.keyCode == 18 && event.keyCode == 83) {
           e.preventDefault();
    }
});