在加利福尼亚DMV网站上禁用粘贴

时间:2018-09-10 00:45:51

标签: javascript

CA DMV具有website,它以某种非标准的方式禁用粘贴,因为没有一种标准的技术(在Firefox的about:config中设置正确的选项,在Firefox或Chrome的扩展名中设置正确的选项)行为有效。当您尝试粘贴到不允许的字段之一时,它会弹出一个对话框,显示“抱歉,此功能已被禁用。”

  1. 这是怎么做到的?

  2. 我该如何纠正?

2 个答案:

答案 0 :(得分:3)

已经提到了为什么会发生这种情况:本质上,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

答案 1 :(得分:2)

您可以在源HTML中看到它是如何完成的-它们具有内联<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); ,以便该事件不会捕获到侦听器中在受限字段中(例如“验证密码”和“电子邮件地址”字段):

{{1}}