【问题标题】:Storing clipboard data into a variable with JavaScript and the Google Chrome API使用 JavaScript 和 Google Chrome API 将剪贴板数据存储到变量中
【发布时间】:2015-03-10 14:13:04
【问题描述】:

我想知道是否可以将剪贴板的内容存储在字符串变量中。

以下消息来源指出,使用纯 JS 是不可能的,但我 在想希望 chrome API 能够实现。 (我正在开发一个 chrome 扩展)。

有一个clipboardRead 权限,会让你相信这是可能的,但它的描述只是:

如果扩展程序或应用程序使用 document.execCommand('paste'),则为必需。 source

澄清一下:我不是想将数据复制到剪贴板或从中粘贴数据。我想将剪贴板的内容存储到一个变量而不以任何方式改变剪贴板的内容。

为了进一步澄清,我不能假设剪贴板数据在操作时恰好位于info.selectionText

如果不可能的话,我想我将不得不忍受它,但这似乎可以通过扩展来完成。


编辑: 我想存储值的原因是因为我需要使用剪贴板来执行操作,但是我想在完成后恢复它的内容,所以用户不会丢失曾经在那里的任何东西。

如果我只是将数据粘贴到文本区域并从那里存储,那么当我将数据放回去时,用户将丢失他们拥有的任何格式,这总比没有好,但不是最佳。

另外,有没有一种方法可以存储该数据,即使它不是字符串(例如图像)?允许我这样做的解决方案无疑也会隐含地回答上述问题,但不是必需的。我主要是在寻找保存字符串数据,并希望有一种保持格式的方法。

【问题讨论】:

    标签: javascript html google-chrome google-chrome-extension clipboarddata


    【解决方案1】:

    前段时间有一个实验性的剪贴板 api,但我猜他们删除了它。您总是可以将内容粘贴到 textarea/contenteditable 并获取它的值:

    function getClipboard() {    
        var el = document.createElement('textarea');
        document.body.appendChild(el);
        el.focus();
        document.execCommand('paste');
        var value = el.value;
        document.body.removeChild(el)
        return value;
    }
    console.log(getClipboard());
    

    【讨论】:

    • 我是 HTML 新手,contenteditable 是否意味着用户不会丢失格式?
    • @LukeP contenteditable 基本上是浏览器呈现的“实时”元素。除非您正在构建某种富文本编辑器,否则您可能不需要它。请注意,我还在我的答案中编辑了代码,style.visibility 不会像我一样工作。
    • 我将编辑我的问题以包含更多关于我为什么需要存储字符串的上下文,这将阐明为什么我需要保留格式。这可能会使您的答案变弱,因此请考虑在几分钟内重新阅读和更新。无论如何,您的回答确实会产生有用的信息。
    • @LukeP 好吧,没有格式会“丢失;”您根本没有修改剪贴板,因为粘贴本质上是只读的。我的回答允许您按原样获取他们的纯文本剪贴板数据,其格式与复制时完全相同。您是否尝试过代码,如果是,它是否没有达到您的预期?
    • 这不再起作用了。你能仔细检查一下这是否适用于最新的 chrome?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多