是否可以使用 JavaScript 在 Firefox、Safari 和 Chrome 中读取剪贴板?

IT技术 javascript cross-browser clipboard
2021-01-24 09:40:40

我正在尝试使用 JavaScript 读取剪贴板的内容。使用 Internet Explorer 可以使用该功能

window.clipboardData.getData("Text")

在 Firefox、Safari 和 Chrome 中是否有类似的方式来读取剪贴板?

5个回答

Safari 支持在onpaste事件期间读取剪贴板

信息

你想做这样的事情:

someDomNode.onpaste = function(e) {
    var paste = e.clipboardData && e.clipboardData.getData ?
        e.clipboardData.getData('text/plain') :                // Standard
        window.clipboardData && window.clipboardData.getData ?
        window.clipboardData.getData('Text') :                 // MS
        false;
    if(paste) {
        // ...
    }
};
Chrome 中没有 clipboardData 成员
2021-03-16 09:40:40
我可以使用这个剪贴板类将数据从 winform 应用程序传输到浏览器吗
2021-03-24 09:40:40
如果只有 Firefox 会支持这个!它的安全并允许访问剪贴板。
2021-04-11 09:40:40
我收回它 - 我正在使用 JQuery 事件绑定,所以我不得不使用 e.originalEvent.clipboardData
2021-04-12 09:40:40

Online Spreadsheets 挂钩Ctrl+ C, Ctrl+V事件并将焦点转移到隐藏的 TextArea 控件,并将其内容设置为所需的新剪贴板内容以进行复制或在事件完成后读取其内容进行粘贴。

这是否解释了如何从剪贴板复制?
2021-03-23 09:40:40
不知道。但由于整个方法无论如何都不是一件艺术品,我会睡一秒钟;)
2021-04-04 09:40:40
你如何测试“在事件完成后粘贴”?
2021-04-07 09:40:40
我们刚刚在 CodeMirror ( marijn.haverbeke.nl/codemirror ) 中添加了(感谢上述评论的灵感)这样的东西它侦听 onbeforepaste,创建一个 textarea,将其聚焦,休眠 10 毫秒,抓取内容,移除 textarea,将焦点返回到它之前的位置,并对粘贴的文本进行处理。只在 IE 上可靠地工作。通过对 ctrl-V(和 command-V)按下做出反应,您还可以让它在 FF 和其他一些浏览器中工作。
2021-04-07 09:40:40
@Marijn:我对我正在使用的编辑器使用了相同的方法,并且隐藏的 textarea 技巧在所有用于键盘粘贴的主要浏览器中都可以正常工作。不幸的是onbeforepaste,一旦您打开上下文菜单,IE 就会触发:您是否设法解决了这个问题?
2021-04-12 09:40:40

不。 如果你确实发现了一个黑客(例如旧版本的闪存),不要依赖它。

我能问你为什么要从剪贴板中读取吗?如果用户想要传递剪贴板内容,他们需要做的就是粘贴。

在他们粘贴到的字段上使用 onchange ?
2021-04-08 09:40:40
我正在读取 onpaste 事件(在 IE 中)上的剪贴板以过滤掉无效字符(例如,从整数值中删除空格)。
2021-04-09 09:40:40
嗯,这篇文章是7年前的。我只是想将信息传递给后来的任何人,Midas Demo @ Mozilla 将向您展示如何阅读剪贴板:www-archive.mozilla.org/editor/midasdemo NO FLASH。尝试使用 Wikipedia 行 - 结果很棒。
2021-04-09 09:40:40

我相信人们使用隐藏的 Flash 元素从您提到的浏览器中读取剪贴板数据。

澄清我之前的评论:Flash 10+ 可以从剪贴板读取,但只能在用户启动的paste事件期间跟随用户点击,与复制不同)。
2021-03-27 09:40:40
这绝对不再是真的,如果曾经是的话。Flash 9+ 只能写入剪贴板,不能从中读取。
2021-04-10 09:40:40

使用@agsamek 的建议,我创建了一个小测试并使其工作。在我的情况下,我需要在新页面加载后等待粘贴输入,所以我专注于视图外的文本区域并从那里读取文本。

您可以将其扩展为收听特定键(粘贴组合),然后专注于隐藏字段。肯定会有更多的工作要做,因为我认为您需要重新关注最后一个聚焦的元素并将内容粘贴到那里。

对于我的用例,虽然这足以使其在最新的 Chrome 和 Firefox 中工作。欢迎提出建议。

https://jsfiddle.net/wuestkamp/91dxjv7s/11/

$(function () {

    $('body').prepend('<input type="text" id="hidden_textbox" style="position: absolute; width:0px; height: 0px; top: -100px; left: -100px">');

    var $hiddenTextbox = $('#hidden_textbox');
    $hiddenTextbox.focus();

    $(document).on('paste', function () {
        setTimeout(function () {
            var val = $hiddenTextbox.val();

            console.log('pasted: ' + val);

        }, 50);

    });

});