禁止取消加利福尼亚州DMV网站上的粘贴功能

3

加利福尼亚州车辆管理局有一个网站,它以某种非标准的方式禁用了粘贴功能,因为纠正此行为的所有标准技术(在Firefox的about:config中设置正确选项、Firefox或Chrome扩展程序)都不起作用。当您尝试将内容粘贴到其中一个被禁止的字段时,它会弹出一个对话框,上面写着“抱歉,此功能已被禁用。”

  1. 这是如何实现的?

  2. 我该如何纠正它?


我的问题是,他们为什么要这样做?是什么让他们认为禁用粘贴会更安全?(他们还会在其他密码屏蔽字段上禁用粘贴,比如你输入付款注册费用的银行账号和路由号码的地方 - 你必须手动两次输入这些长而不常用的数字) - peterflynn
2个回答

5
已经提到了为什么会出现这种情况:基本上,input元素上有事件监听器,可以检测和阻止右键单击和control键事件。(展开下面的代码片段以查看执行此操作的函数。)

function whichButton(event, msg) {
  if (event.button == 2)//RIGHT CLICK
  {
    alert(msg);
  }
}

function noCTRL(e, msg) {
  var code = (document.all) ? event.keyCode : e.which;
  if (parseInt(code) == 17) //CTRL
  {
    alert(msg);
    window.event.returnValue = false;
  }
}

虽然已经提到的答案(防止 keydown 传播)解决了 control 键的问题,但它并没有重新启用右键单击。我认为这个问题的最简单解决方案是重新定义事件监听器调用的 whichButtonnoCTRL 函数为空。这很简单:

whichButton = noCTRL = () => {}

您可以像下面这样将其包装在用户脚本中:

您可以将此内容包装在用户脚本中,如下所示:

// ==UserScript==
// @name         Reenable Paste on CA DMV
// @match        https://www.dmv.ca.gov/FIM/sps/uscfed/usc/self/account/create
// @grant        none
// ==/UserScript==

whichButton = noCTRL = () => {}

要使用用户脚本,您需要安装TampermonkeyGreasemonkey


3

您可以在源HTML中看到如何完成-他们有一个内联的keydown属性:

<input class="entry-field" name="usc.form.password.new.confirm" id="password_new_confirm" value="" size="20" maxlength="20" tabindex="3" onmousedown="whichButton(event, 'Sorry, this functionality is disabled.')" onkeydown="return noCTRL(event, 'Sorry, this functionality is disabled.')" type="password" />

一种选择是编写用户脚本,拦截在捕获阶段中的keydown事件,并调用stopPropagation()使事件不会传递到受限字段(例如“验证密码”和“电子邮件地址”字段)上的监听器:
// ==UserScript==
// @name         Reenable Paste
// @namespace    CertainPerformance
// @version      1
// @match        https://www.dmv.ca.gov/FIM/sps/uscfed/usc/self/account/create
// @grant        none
// ==/UserScript==

document.body.addEventListener('keydown', (e) => {
  e.stopPropagation();
}, true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接