问题涉及特定网站:tickets order on NS.nl。在该页面上有用于输入电子邮件的文本输入字段,该字段已禁用Ctrl-V(粘贴)。
问题:Greasemonkey脚本将在字段上启用哪个粘贴?
我已经研究过各种解决方案,即:
并且来到以下脚本(不幸的是)对于给定的站点不起作用(使用FF v40,Greasemonkey v3.4进行测试):
// Taken from http://userscripts-mirror.org/scripts/review/40760
unsafeWindow.disable_paste = function() { return true; };
// jQuery is already available on the page:
var $j = jQuery.noConflict();
// Site generates the form on-the-fly, so we schedule the necessary modifications for later:
setTimeout(function() {
$j(document).off('copy paste', '[data-regex=email], [data-regex=emailRepeat]');
$j(document).off('keyup keydown keypress cut copy paste');
// Taken from https://stackoverflow.com/questions/28266689/how-to-enable-paste-on-html-page-with-locked-cmdv
$j('*').each(function(){
$j(this).unbind('paste');
});
}, 2000);
使用延迟执行(通过setTimeout()
),因为站点动态构建表单。 "有问题"元素显示在以下屏幕截图中:
答案 0 :(得分:3)
要取消绑定事件,您应该提供页面设置的原始处理程序:
function change_links_target()
{
var all_document_links = mFrameDocument.getElementsByTagName("a");
for (i = 0; i < all_document_links.length; i++){
all_document_links[i].setAttribute("target", "_top");
}
}
另一种仅适用于Chrome的方法是为// ==UserScript==
// @name Re-enable copy/paste of emails
// @include https://www.ns.nl/producten/s/railrunner*
// @grant none
// ==/UserScript==
$(function() {
$(document).off("copy paste",
"[data-regex=email], [data-regex=emailRepeat]",
$._data(document, "events").paste[0].handler);
});
/ oncopy
元素属性分配直接事件侦听器,因此它的优先级高于网站的侦听器附于onpaste
。在您的监听器中,阻止其他侦听器通过stopImmediatePropagation:
document
答案 1 :(得分:0)
所选答案对我不起作用。我发现这个简单的脚本确实有效:
var allowPaste = function(e){
e.stopImmediatePropagation();
return true;
};
document.addEventListener('paste', allowPaste, true);
在这里找到的:https://www.howtogeek.com/251807/how-to-enable-pasting-text-on-sites-that-block-it/