启用复制并粘贴到HTML字段

Enable copy and paste in to HTML fields

本文关键字:HTML 字段 复制 启用      更新时间:2023-09-26

我遇到了一些极度偏执的金融网站,它们太愚蠢了,不会认为在登录表单上禁用复制和粘贴可以在某种程度上确保它们的安全。就我而言,这令人难以理解,因为我几乎从不输入密码,而是总是从KeePass复制和粘贴密码。由于这些都是长时间生成的密码,所以输入它们非常不方便。多年来,我制作了下面的bookmarklet,效果非常好:

javascript:it = document.evaluate('//input[string-length(@onpaste)!=0]' , document, null, XPathResult.ANY_TYPE , null ); t = it.iterateNext(); while (t) {t.onpaste=undefined; t.oncopy=undefined; t.onfocus=undefined; t.onblur=undefined; t.onkeydown=undefined; t.onkeypress=undefined; t.ondrag=undefined; t.ondrop=undefined; t.onclick=undefined; t.onkeydown = undefined; t.onkeyup = undefined; t.onmousemove = undefined; t.onmouseout = undefined; t.onmouseover = undefined;  t.onchange = undefined; it = it.iterateNext(); }

最近,我访问了一些新的和重新设计的网站,但这些网站已经不起作用了。我在一个这样的网站上花了一些时间,并确认该脚本实际上正在迭代所有相关的输入字段,并将相应的事件处理程序设置为undefined,但由于某种原因,它没有生效。在运行bookmarklet之后,如果我检查元素,我仍然可以看到有效地禁用粘贴操作的事件。

如需复制,请访问本网站,点击"继续登录"并尝试使用上述书签。您会注意到,它在用户名字段上启用了复制和粘贴,但在密码字段上没有。我不知道他们在用什么JS黑魔法,但有人能帮我弄清楚吗?

在Firefox上试用bookmarketlet后,我收到了一条有用的错误消息,帮助我找到了一个拼写错误并使其正常工作。然后我注意到Chrome也给了我一个错误,但它不够描述性,所以它有误导性,我没有注意到它。拼写错误是迭代器高级的最后一句话,它本应该是t = it.iterateNext(),但它被写成了it = it.iterateNext()。由于这个拼写错误,循环在处理第一个文本字段后出现错误。虽然我已经使用这个书签集很长时间了,但我没有注意到拼写错误,因为我没有遇到过有多个这样的字段的网站。我现在正在维护这个书签的改进版本。

这个bookmarklet做两件事:

  • 搜索具有通常用于阻止粘贴的事件侦听器属性的文本和密码字段
  • 删除所有这些事件侦听器属性
  • 设置一个粘贴处理程序,将目标值设置为剪贴板中的值。这个额外的步骤有助于一些顽固的网站采取额外的步骤(我目前还不理解)来阻止粘贴