使用 document.execCommand('copy') 复制到剪贴板因大文本而失败

2023-11-24

我使用隐藏文本区域来放置一些文本,选择它,然后使用 document.execCommand 将其复制到剪贴板。这通常有效,但当文本很大时会失败(返回 false)。在 Chrome v55 中,它似乎在 180K 字符左右失败。

通过这种方式复制的数据量有限制吗?普通的 Ctrl+C 似乎不受同样的限制。

注意:有人将此标记为可能的重复项document.execCommand('copy') 有大小限制吗?。这可能是类似的问题,但该问题被标记为我不使用的特定框架,而且也没有得到回答。我相信我的问题更普遍并且仍然相关。

我附上代码供参考。

      function copyTextToClipboard(text) {
        var textArea = document.createElement('textarea');
        textArea.style.position = 'fixed';
        textArea.style.top = 0;
        textArea.style.left = 0;
        textArea.style.width = '2em';
        textArea.style.height = '2em';
        textArea.style.padding = 0;
        textArea.style.border = 'none';
        textArea.style.outline = 'none';
        textArea.style.boxShadow = 'none';
        textArea.style.background = 'transparent';
        textArea.value = text;
        document.body.appendChild(textArea);
        textArea.select();
        try {
          var successful = document.execCommand('copy');
          var msg = successful ? 'successful' : 'unsuccessful';
          console.log('Copying text command was ' + msg);
        } catch (err) {
          console.log('Oops, unable to copy');
        }
        document.body.removeChild(textArea);
      }

这个问题更多地与渲染这段长文本所需的时间有关,而不是与execCommand('copy')调用自己。

Firefox 会发出一条非常有解释性的错误消息:

document.execCommand(‘cut’/‘copy’) 被拒绝,因为它不是从短暂运行的用户生成的事件处理程序内部调用的。

您的代码生成文本所需的时间太长,因此浏览器无法将其识别为半信任事件...

解决方案是首先生成此文本,并且仅在监听用户手势后才能调用execCommand。因此,为了使其成为可能,您可以例如听一个mousedown事件来生成文本,并且仅在mouseup事件你是否真的执行了复制命令。

const text = ('some text a bit repetitive ' + Date.now()).repeat(50000);

function copyTextToClipboard(text) {
  // first we create the textArea
  var textArea = document.createElement('textarea');
  textArea.style.position = 'absolute';
  textArea.style.opacity = '0';
  textArea.value = text;
  document.body.appendChild(textArea);

  var execCopy = e => {   // triggered on mouseup
    textArea.select();
    var successful = document.execCommand('copy');
    var msg = successful ? 'successful' : 'unsuccessful';
    console.log('Copying text command was ' + msg);
    document.body.removeChild(textArea);
  };
  // here the magic
  btn.addEventListener('mouseup', execCopy, {
    once: true 
  });
}
// triggered on mousedown
btn.onmousedown = e => copyTextToClipboard(text);
<button id="btn">copy some text in your clipboard</button>
<p>May struggle your browser a little bit, it's quite a long text... Please be patient</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 document.execCommand('copy') 复制到剪贴板因大文本而失败 的相关文章

  • 从 JavaScript 加载图像

    在我的专辑幻灯片放映页面上 我有类似的代码 span style display none img src imageUrl span span show loader span in showImage 我确定图像已加载 因此我显示图像并
  • 在 IE8 中使用 javascript __proto__

    你好 我在 javascript 中有这两个对象 var john firstname John lastname Smith var jane firstname Jane 这样做 jane proto john 我可以访问 Jane 的
  • 使用非常大的背景位置偏移是否存在性能问题?

    我正在构建一个进度条控件 并且正在研究它实际上并不显示进度 而只是旋转 正在发生某事 的指示器的情况 我的设计基本上是交替的对角条纹 本质上是一个像这样的理发杆 但是 旋转 由于希望将尽可能多的负载转移给渲染引擎 我想为此使用 CSS 过渡
  • D3更新circle-pack数据新节点与现有节点重叠

    我正在关注一般更新模式 http bl ocks org mbostock 3808234但在分层方面存在问题 使用圆形包装布局 我pack新数据 update enter and exit圆形元素 然而 当新元素enter 它们重叠upd
  • 如何使传单圆圈标记可拖动?

    使用传单 我创建了一个L circleMarker我希望它是可拖动的 var marker L circleMarker new L LatLng 48 94603 2 25912 draggable true bindPopup Circ
  • 每n秒执行一次函数

    我制作了这个在 10 秒后点击链接的代码片段 function timeout window setTimeout function img left click 1000 setTimeout timeout 1000 timeout 我
  • 将 SVG 路径转换为绝对命令

    给定一个 SVG Path 元素 如何将所有路径命令转换为绝对坐标 例如 转换此路径
  • 有没有办法在 React 中自动播放音频而不使用 onClick 事件?

    我在尝试在 componentDidMount 中播放音频时收到此错误 未捕获 承诺中 DOMException play 失败 因为用户没有先与文档交互 componentDidMount document getElementById
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • 如何将本地文本文件上传到文本区域(网页内)

    我是一名新手程序员 需要一些帮助来弄清楚如何将本地文本文件上传到我正在构建的网站内的文本区域 我非常精通 HTML CSS 对 Javascript JQuery 有相当的了解 而且我刚刚学习 PHP 您能提供的任何帮助我将不胜感激 我有一
  • 只保留 A-Z 0-9 并使用 javascript 从字符串中删除其他字符

    我正在尝试验证字符串以使它们成为有效的网址 我只需要保留 A Z 0 9 并使用以下命令从字符串中删除其他字符javascript or jquery 例如 贝儿餐厅 我需要将其转换为 百丽餐厅 所以字符被删除 只保留 A Z a z 0
  • Angular 2 将字符串转换为 md5 哈希

    我找到了ts md5 https www npmjs com package ts md5包 但在示例中它有一个hashStr方法 但现在不行了 类型上不存在属性 hashStr Md5 使用该错误后 该错误会记录在我的控制台中 我怎样才能
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • 如何使用 Javascript 在 html 文件中搜索字符串?

    我有 5 个 html 文件 并且有一个搜索表单 我想用它来搜索这些 html 文件中的文本
  • Javascript等待/异步执行顺序

    所以我试图把我的头脑集中在 Promise await async 上 我不明白为什么当 go 执行时 带有 finished 的警报会紧随 console log coffee 之后 当所有函数都使用等待 承诺时 为什么它只等待 getC
  • 从请求url获取hash参数

    我有这样的网址 http www coolsite com daily plan id 1 http www coolsite com daily plan id 1解析该字符串并读取哈希值 id 之后的值 的最简单方法是什么 谢谢 在客户
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 什么时候可以使用Javascript,什么时候不可以?

    不使用太多 javascript jquery 是个好习惯吗 我们应该尽可能避免它 为了良好的可访问性 吗 什么时候可以使用 JavaScript 什么时候不能在网页设计和开发中使用 JavaScript 在什么场景 什么条件下 Updat
  • 如何使用 jQuery 过滤 DropDownList 中的选项

    我有 2 个 DropDownList 第一个 DropDownList 有 4 个选项 第二个 DropDownList 有 20 个选项 我想要一个选项value 1在第一个 DropDownList 中选择我在第二个 DropDown
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引

随机推荐

  • 递归函数不返回任何内容? [复制]

    这个问题在这里已经有答案了 我编写了以下函数来实现我自己的二分搜索 def bisect input target mid len input 2 if len input 1 if input 0 target return 1 else
  • Python - 在每一行的不同位置对数组进行切片

    我有一个 2D python 数组 我想以一种奇怪的方式对其进行切片 我想要一个恒定宽度的切片 从每行的不同位置开始 如果可能的话 我想以矢量化的方式做到这一点 例如我有数组A np array range 5 range 5 看起来像 a
  • 在 Java 中,给定一个 IP 地址范围,返回覆盖该范围的 CIDR 块的最小列表

    我在将 IP 地址范围转换为 CIDR 块列表时遇到一些逻辑问题 我确实相信这个网站做得对 http ip2cidr com 我想传入一个起始 IP 地址和一个结束 IP 地址 并让 java 吐出所需的 CIDR 块的最小列表 以仅覆盖传
  • 如何防止 Cassandra 提交日志填满磁盘空间

    我正在 AWS 上运行一个两节点 Datastax AMI 集群 昨天 卡桑德拉开始拒绝一切事物的连接 系统日志没有显示任何内容 之后lot在修补过程中 我发现提交日志已填满分配的安装上的所有磁盘空间 这似乎导致连接拒绝 删除了一些提交日志
  • 如何使用 mod_proxy 保留通过 AJP 连接器发送到 Apache 的 Tomcat HTTP 响应的 Content-Type 标头

    我遇到了 HTTP 响应不正确的问题Content Type通过 AJP 1 3 连接器访问 Apache 后面的 Tomcat 中托管的 Axis2 Web 服务时 会使用此标头 我可以通过其 RESTful 接口在浏览器中毫无问题地访问
  • 如何在窗口形式的datagridview单元格中放置自定义控件

    我正在开发一个窗口窗体应用程序 我需要在数据网格视图的单元格中放置由两个标签组成的自定义控件 我已经创建了自定义控件 指导我使用自定义控件填充单元格 我认为您想创建自己的编辑控件来实现 IDataGridViewEditingControl
  • 将列表的元素转换为二进制

    假设我有一个列表 lst 0 1 0 0 我怎样才能让python将此列表解释为二进制数0100 以便2 0100 给我01000 我能想到的唯一方法是首先创建一个函数 将 二进制 元素转换为相应的整数 以 10 为基数 然后使用 bin
  • Spring Security NoClassDefFoundError 错误

    从事 Spring 项目并正在学习使用 Spring Security 该项目正在发挥作用 但突然决定不这样做 谁能解释一下为什么 WebInit java package com catalyst Config import javax
  • Redis批量插入

    我正在考虑使用 Redis 协议进行批量插入 如下所述 http redis io topics mass insert在我忙于编写代码来处理这个问题之前 我只想确保我清楚 Redis 需要什么来完成这项工作 上面的链接建议 要使用批量插入
  • 如何处理返回除 ViewResult 之外的结果的操作的授权?

    我在 ASP NET MVC 控制器上使用自定义授权过滤器 如果用户在特定操作上授权失败 该过滤器会将用户重定向到登录屏幕以外的 URL 这对于返回视图的操作来说是可以的 但是我的许多操作返回其他结果类型 例如 PartialResult
  • 实际的机器代码在各个方面是什么样子的? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 关于机器代码到底是什么似乎有很多观点 我听有人说它是汇编 二进制或十六进制 机器代码本质
  • Java Swing 的地图 API

    我想在 swing 应用程序中可视化地理地图 我只找到了 swingx 地图 api 你还知道其他开源地图API吗 Try Geotools 它有一个很好的地理空间数据API和工具
  • Swift Mac OSX NSButton 标题颜色

    我想知道如何在 swift 中将标题颜色更改为 NSButton 我在 Objective C 中看到了很多示例 但我认为 swift 中的实现是不同的 任何人都可以为我提供一个示例吗 试试这个viewDidLoad或某处 在斯威夫特 3
  • 如何解决 MS Access 2010 中的“条件表达式中的数据类型不匹配”错误? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在尝试对 MS Access 数据库中的报告进行故障排除 该文件是由在我加入我所工作的组织之前担任我的职位的人员构建的 报告抛出错误 条件表达式中的数据类型不匹配 这使我相信导入数据库
  • 运行时主机到底是什么?

    Runtime Host 的确切定义是什么 来自MSDN 公共语言运行时被设计为支持各种不同类型的应用程序 从Web 服务器应用程序到具有传统的丰富Windows 用户界面的应用程序 每种类型的应用程序都需要运行时主机来启动它 运行时主机将
  • 如何在 Java 中检测 Image 对象上的鼠标单击事件?

    实施 国王角Java 中的 美化的多人纸牌游戏 我试图允许玩家将一张牌 图像 从他们的手上拖到桌子上的其他地方 问题在于玩家的手是 扇形 的 因此纸牌的图像会旋转并且重叠 这是一手牌的例子 我考虑过让每张卡都成为JPanel 但问题是我必须
  • C++ 先前的定义错误

    因此 感谢这个网站 我找到了之前问题的答案 我正在向 GNU automake 项目中的类添加一个函数 该函数使用指向doc目的 依赖项包含在 Makefile am 文件中以包含doc h and plsa h按各自的顺序 但是 当我编译
  • 为什么这段代码不抛出 NullPointerException

    我只是和我的朋友讨论使用类名调用静态方法 并尝试了这段代码 并期望它在运行时抛出 NPE 但事实证明它没有作用 我只是想了解执行顺序 public class One public static void method System out
  • NSObject.BroadSystemFontWeights 警告消息是什么意思?

    我最近将 XCode 更新到 7 0 并收到以下警告消息 Xcode IDEInterfaceBuilder Cocoa NSObject BroadSystemFontWeights 这是什么意思以及如何摆脱它 当我将字体粗细设置为时 我
  • 使用 document.execCommand('copy') 复制到剪贴板因大文本而失败

    我使用隐藏文本区域来放置一些文本 选择它 然后使用 document execCommand 将其复制到剪贴板 这通常有效 但当文本很大时会失败 返回 false 在 Chrome v55 中 它似乎在 180K 字符左右失败 通过这种方式