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

Fla*_*Moe 7 clipboard google-chrome google-chrome-extension

作为参考为了在 Chrome 扩展中读取剪贴板文本,您必须:

  • 在清单中请求“clipboardRead”权限
  • 创建一个后台脚本,因为只有后台脚本可以访问剪贴板
  • 在背景页面中创建一个元素以接受剪贴板粘贴操作。如果将其设为文本区域,您将获得纯文本,如果将其设为 contentEditable=true 的 div,您将获得格式化 HTML
  • 如果要将剪贴板数据传递回页面内脚本,则需要使用消息传递 API

但这仅适用于manifest_version 2,因为在manifest_version 3中你不能有后台脚本,而是有一个服务工作者。

在这个服务工作者中你不能拥有正常的功能,所以我有一个

chrome.runtime.onMessage.addListener
Run Code Online (Sandbox Code Playgroud)

例如,在此“manifest_version 3 服务工作线程 background.js 脚本”中,我从 popup.html 调用一条消息。

但问题是这个服务人员没有“文档”,所以我无法创建文本区域来执行复制内容并调用 document.execCommand 的技巧。

那么...有什么方法可以将 Manifest Version 3 中的内容复制到剪贴板吗?

ric*_*sjs 1

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

  1. 在后台脚本中,设置某种侦听器来触发复制功能。
  2. 设置一个注入脚本/函数,创建一个不可见的文本区域,其中包含要复制的所需文本。在同一脚本/函数中,将复制添加到剪贴板,如此处的解决方案
  3. 在您的background.js脚本中,设置代码以检索当前活动选项卡(如@wOxxOm建议)并使用选项卡ID动态执行您的注入脚本/函数

由于您注入的脚本(又名内容脚本)可以访问文档,这次文档是打开网页的文档,因此您可以创建一个不可见的文本区域,将文本区域设置为包含要复制的文本,然后使用文档.execCommand("复制"); 将文本复制到剪贴板。

下面是我的 background.js 脚本的示例,当您按 Ctrl+Shift+K 时,它将文本复制到剪贴板。