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