google-chrome - 如何在 Manifest_version 3 Chrome 扩展程序中将内容复制到剪贴板?

标签 google-chrome google-chrome-extension clipboard

作为引用 here为了在 chrome 扩展中读取剪贴板文本,您必须:

  • 在您的 list 中请求“clipboardRead”权限
  • 创建一个后台脚本,因为只有后台脚本才能访问剪贴板
  • 在您的背景页面中创建一个元素以接受剪贴板粘贴操作。如果你把它设为 textarea,你会得到纯文本,如果你把它设为 contentEditable=true 的 div,你会得到 Formatted HTML
  • 如果要将剪贴板数据传递回页内脚本,则需要使用消息传递 API

  • 但这仅适用于 manifest_version 2,因为在 manifest_version 3 中,您不能拥有后台脚本,而是服务 worker 。
    在这个 service worker 中你不能有正常的功能,所以我有一个
    chrome.runtime.onMessage.addListener
    
    例如,在这个“manifest_version 3 service worker background.js 脚本”中,我从 popup.html 调用了一条消息。
    但是,问题是这个 service worker 没有“文档”,所以我无法创建 textarea 来复制那里的内容并调用 document.execCommand。
    那么......有没有办法将内容复制到 list 版本 3 中的剪贴板?

    最佳答案

    这是一个非常粗略(但有效)的解决方案:

  • 在您的后台脚本中,设置某种监听器来触发复制功能。
  • 设置一个注入(inject)脚本/函数,用要复制的所需文本创建一个不可见的文本区域。在同一个脚本/函数中,添加复制到剪贴板 ala 解决方案 here .
  • 在您的 background.js 脚本中,设置代码以检索当前事件选项卡(如@wOxxOm 建议的那样)并使用选项卡 ID to dynamically execute your injection script/function .

  • 由于您注入(inject)的脚本(又名内容脚本)可以访问一个文档,此时该文档是打开网页的文档,您可以创建一个不可见的textarea,将textarea设置为要复制的文本,然后使用document .execCommand("复制");将文本复制到剪贴板。
    Here是我的 background.js 脚本的一个示例,当您按 Ctrl+Shift+K 时,它会将文本复制到剪贴板。

    关于google-chrome - 如何在 Manifest_version 3 Chrome 扩展程序中将内容复制到剪贴板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68090436/

    相关文章:

    php - Chrome 在下载时无法识别 url 编码的文件名

    android - 使用网络音频 API 和 navigator.getUserMedia 在 Android 版 Chrome 中录制音频

    c++ - Visual Studio 2013 C++ 监 window 口 : arrays copy incorrectly to clipboard

    javascript - 具有自定义 XMLHttpRequest 的 Google Chrome 扩展

    windows - 如何安全正确地创建 Windows 剪贴板的备份?

    vba - 如何检查剪贴板是否为空文本?

    css - 自动页边距不会使页面中的图像居中

    html - 如何在 Chrome Windows 下的 html5 Canvas 中对 clip() 边缘进行抗锯齿处理?

    javascript - 如何将 chrome.alarms 用于 Google Chrome 扩展

    c++ - 将 unsigned char 字符串从 native 客户端模块发送到浏览器