CA DMV具有website,它以某种非标准的方式禁用粘贴,因为没有一种标准的技术(在Firefox的about:config中设置正确的选项,在Firefox或Chrome的扩展名中设置正确的选项)行为有效。当您尝试粘贴到不允许的字段之一时,它会弹出一个对话框,显示“抱歉,此功能已被禁用。”
这是怎么做到的?
我该如何纠正?
答案 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 密钥问题,但它并未重新启用右键单击功能。我想断言,此问题的最简单解决方案是将事件侦听器调用的whichButton
和noCTRL
函数重新定义为空白。要做到这一点很简单:
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 = () => {}
要使用该用户脚本,您需要安装Tampermonkey或Greasemonkey。
答案 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}}