iframe 中的文本可以复制到剪贴板吗?

nav*_*nav 8 javascript iframe reactjs

在我的 React 应用程序中,我在遍历数组后显示卡片(因此理论上可以有n卡片)。

我希望在用户单击该卡片时复制卡片中显示的文本。然而,问题是反应应用程序是在 iframe 内呈现的。

当应用程序位于单个选项卡中时,复制功能有效。但是,当在 iframe 中尝试时,我遇到了这个错误:

Uncaught (in promise) DOMException: Disabled in this document by Feature Policy.
Run Code Online (Sandbox Code Playgroud)

这与Google 的这项政策变更有关。有什么方法可以使此功能正常工作?

附加信息:在 iframe 中呈现的应用与父应用不共享同一个域

背景阅读链接:

col*_*ock 11

要添加到 joe 的答案中,如果您需要允许剪贴板从与父页面不同的来源访问 iframe 网站(特别是如果子页面重定向到另一个来源),则需要在 '允许'属性值。例如,要允许剪贴板读取访问https://trustedsite.com/somefolder/index.html,请使用:

<iframe src="index.html" allow="clipboard-read self https://trustedsite.com/somefolder/index.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

如果您嵌入跨域 URL 并且未在“允许”中提供受信任的域,您将在 Chrome 中看到以下错误:

由于应用于当前文档的权限策略,剪贴板 API 已被阻止。

  • 您也可以使用allow =“clipboard-read *”来允许来自任何父级的复制 (6认同)

joe*_*joe 6

正如这里提到的:

要在 iframe 中使用 API,您需要使用Permissions Policy启用它,它定义了一种机制,允许有选择地启用和禁用各种浏览器功能和 API。具体而言,您需要通过任一种或两种clipboard-readclipboard-write根据您的应用程序的需求。

<iframe src="index.html" allow="clipboard-read; clipboard-write"></iframe>
Run Code Online (Sandbox Code Playgroud)

如果您只想将文本复制到剪贴板(即您不需要能够以编程方式读取它),那么您只需要clipboard-write权限:

<iframe src="index.html" allow="clipboard-write"></iframe>
Run Code Online (Sandbox Code Playgroud)