【问题标题】:javascript: prevent page from blocking ctrl+c / ctrl+vjavascript: 防止页面阻塞 ctrl+c / ctrl+v
【发布时间】:2012-11-04 05:10:25
【问题描述】:

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

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

javascript:void(document.oncontextmenu=null) 

到目前为止,我认为在不涉及 Greasemonkey 等 3rd 方工具的情况下,没有与 javascript sn-p 类似的解决方案

【问题讨论】:

  • 关闭Javascript?
  • 考虑一下,有时这是个好主意。例如密码验证字段。如果您输入了初始密码,复制粘贴错误密码很快就会让每个人都感到痛苦。
  • 密码字段(如果这是您所说的)是不可复制的,至少在 Windows 下是这样。这是一种安全措施。
  • Greasemonkey 是您所需要的 - addons.mozilla.org/en-US/firefox/addon/greasemonkey
  • @casperOne 这听起来可能跑题了。这个问题很可能没有类似于 javascript 右键单击​​技巧的解决方案。

标签: javascript validation


【解决方案1】:

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

所以,我浏览了前几个“javascript 防止复制粘贴”的 Google 结果,发现大部分是愚蠢的脚本:Disable pasting text into HTML formPrevent Copy, Cut and Paste into HTML Input Text Fieldsnot 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
}

【讨论】:

    【解决方案2】:

    windows 上的另一种解决方案:AutoHotkey.

    SendRaw, %Clipboard%
    

    例如,以下绑定到 ctrl+F3 以键入剪贴板内容。只需将它放在一个名为 typeclipboard.ahk 的文件中并使用 AutoHotkey 运行它:

    ^F3::SendRaw, %Clipboard%
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2021-12-06
      • 1970-01-01
      相关资源
      最近更新 更多