在网站上启用“粘贴”的脚本

问题描述 投票:0回答:3

问题涉及特定站点: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()

)是因为站点动态构建表单。 “有问题”的元素如以下屏幕截图所示:

javascript browser greasemonkey clipboard copy-paste
3个回答
27
投票
所选答案对我不起作用。我发现这个简单的脚本确实有效:

document.addEventListener('paste', function(e) { e.stopImmediatePropagation(); return true; }, true);
在这里找到:

https://www.howtogeek.com/251807/how-to-enable-pasting-text-on-sites-that-block-it/

编辑:可能需要停止传播

keydown

 以及某些网站。

document.addEventListener('keydown', function(e) { e.stopImmediatePropagation(); return true; }, true);
    

5
投票
  • 要取消绑定事件,您应该提供页面设置的原始处理程序:

    // ==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); });
    
    
  • 另一种仅在 Chrome 中有效的方法是为

    oncopy

    /
    onpaste
     元素属性分配直接事件侦听器,因此它将比附加到 
    document
     的站点侦听器具有更高的优先级。在您的侦听器中,通过 
    stopImmediatePropagation: 防止其他侦听器看到该事件

    var input = document.querySelector("[data-regex=email], [data-regex=emailRepeat]"); input.onpaste = input.oncopy = function(event) { event.stopImmediatePropagation() };
    
    

0
投票
下面的代码可用于在禁用的网站中启用复制和粘贴。

javascript:(function(){ allowCopyAndPaste = function(e){ e.stopImmediatePropagation(); return true; }; document.addEventListener('copy', allowCopyAndPaste, true); document.addEventListener('paste', allowCopyAndPaste, true); document.addEventListener('onpaste', allowCopyAndPaste, true); })();
    
© www.soinside.com 2019 - 2024. All rights reserved.