启用复制并粘贴到HTML字段

时间:2014-09-08 15:56:30

标签: javascript html

我遇到了一些非常偏执的金融网站,这些网站过于愚蠢,认为禁用复制和粘贴登录表单会使它们变得安全。在我的情况下,它很难理解,因为我几乎从不输入密码,而是始终从KeePass复制并粘贴它们。由于这些是长时间生成的密码,因此输入密码非常不方便。多年来,我制作了下面的书签,效果非常好:

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后,如果我检查元素,我仍然可以看到有效禁用粘贴操作的事件。

要重现,请访问this website并点击"继续登录"并尝试使用上面的书签。您会注意到它可以在用户名字段中复制和粘贴,但不能在密码字段上复制和粘贴。我不知道他们正在使用什么样的JS黑魔法,但有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

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

这个小书签做了两件事:

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