启用复制并粘贴到HTML字段
Enable copy and paste in to HTML fields
我遇到了一些极度偏执的金融网站,它们太愚蠢了,不会认为在登录表单上禁用复制和粘贴可以在某种程度上确保它们的安全。就我而言,这令人难以理解,因为我几乎从不输入密码,而是总是从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做两件事:
- 搜索具有通常用于阻止粘贴的事件侦听器属性的文本和密码字段
- 删除所有这些事件侦听器属性
- 设置一个粘贴处理程序,将目标值设置为剪贴板中的值。这个额外的步骤有助于一些顽固的网站采取额外的步骤(我目前还不理解)来阻止粘贴
- 处理HTML字段集's大小
- 编码为深度嵌套对象的 HTML 字段 json
- Javascript 单击html字段值而不编辑.js文件
- JavaScript 表单验证不适用于所有 HTML 字段
- JavaScript确认何时在表单中选择动态HTML字段
- 使用“添加用户”按钮添加HTML字段
- jquery动态添加HTML字段遇到了神秘的问题
- 如何显示和隐藏 html 字段集 以及从 Asp.Net 代码后面设置图例文本
- 在 HTML 字段中填写本地日期时间和时区名称
- 忽略链接、复选框.在可编辑的 HTML 字段中使用 jQuery
- 使用 JavaScript 进行 HTML 字段表单验证
- 如何使用 javascript 在新窗口中的 html 字段中显示值
- Javascript 为 HTML 字段赋值
- 所有 HTML 字段值的总和不起作用
- 显示 HTML 字段的 Android 软键盘,即使连接了输入设备
- javascript的新手,我将如何嵌入我的javascript文件并在HTML字段中运行它
- 为什么使用knockout.js时数据不会出现在HTML字段中
- 使用Javascript从html字段获取年龄
- 只允许HTML字段以某些单词开头
- 如何使用javascript填充HTML字段