javascript: 防止页面阻塞 ctrl+c/ctrl+v

标签 javascript validation

某些表单验证器会在某些输入字段上阻止 CTRL+C/CTRL+V。有没有快速的bookmarklet或者可以让我正确使用键盘的东西。或者,也许浏览器允许我覆盖某些页面的那种粗鲁行为?

编辑:我正在寻找的是类似的解决方案,例如可用于通过在页面上下文中执行 javascript 片段来启用右键单击页面的解决方案:

javascript:void(document.oncontextmenu=null) 

到目前为止,我认为没有与 javascript 片段类似的解决方案,而不涉及像 Greasemonkey 这样的 3rd 方工具

最佳答案

这取决于它是如何完成的。此外,删除/禁用事件监听器总是有风险的,您可能会严重损害站点的功能 - 而且您永远不知道处理程序是做坏事还是好事,至少您根本不知道是否有处理程序。

因此,我浏览了“javascript 防止复制粘贴”的前几个 Google 搜索结果,发现大部分是愚蠢的脚本:Disable pasting text into HTML form , Prevent Copy, Cut and Paste into HTML Input Text Fields , not working example .那么脚本现在可以做什么:

  • 删除输入元素的所有 on-copy、-paste、-input、-cut、-drag 等属性
  • 在文档上捕获这些事件类型并停止它们的传播,因此(气泡)处理程序将永远不会被调用并且不能阻止默认操作

  • 然而,正如已经说过的,这并不能阻碍一切。 input事件,非常有用,被this solution 巧妙利用以防止一次插入多个字符。因此,您需要决定是否要停止该事件并可能破坏应用程序。
    var evts = ["copy", "paste", "cut", "drag", "selectionstart?", "input?", …?];
    var els = [document, document.body].concat(
      [].slice.call(document.getElementsByTagName("input")),
      [].slice.call(document.getElementsByTagName("textarea"))
    );
    function trap(e) { e.stopPropagation(); }
    for (var i=0; i<evts.length; i++) {
        var evt = "on"+evts[i].charAt(0).toUpperCase()+evts[i].substr(1);
        for (var j=0; j<els.length; j++)
            els[j][evt] = null; // remove handler
        document.addEventListener(evts[i], trap, true); // capture phase
    }
    

    关于javascript: 防止页面阻塞 ctrl+c/ctrl+v,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216244/

    相关文章:

    angularjs - 如何将 angularjs 与 springmvc 一起使用来获得服务器端验证?

    javascript - 前端还是后端匹配密码?

    javascript - PDF.js 在 sails.js 中使用显示 API

    javascript - Angular Material,存在值时禁用 float 标签

    php - CakePHP 验证规则 : alphanumeric with spaces

    ruby-on-rails - 我在源代码/文档中的哪里可以找到ActiveModel::Errors default error message values?

    javascript - JQUERY单选按钮弹出

    javascript - 从 Blockchain.info 上的时间戳输出人类可读的时间

    javascript - 使用 axios 和 nuxt 的服务器和客户端 API 调用的不同 baseURL

    javascript - 表单验证 Angular