【问题标题】:document.execCommand copy command does not work or other solution?document.execCommand 复制命令不起作用或其他解决方案?
【发布时间】:2013-01-10 08:32:17
【问题描述】:

我正在做的是以编程方式从网页中选择所有文本,然后复制它。全选适用于execCommand,但复制不适用。

这是我的代码:

$.ajax({
    url: $('#url').val(),
    type: 'GET',
    success: function(res) {
        $('#result').html(res.responseText);
        $('#result').fadeIn('fast');


        $('#result').focus();
        $('#result').select();

        document.execCommand('selectall');

        // copy does not work ?
        document.execCommand('copy');

    }
});

Here is Example on JsBin

我也尝试使用 Flash 解决方案,例如 ZeroClipboard,但似乎必须明确地按下他们的 Flash 对象/按钮来复制文本,而我想这样做 zeroclip.setText('whatever'); 无需用户按下按钮。

谁能告诉如何以编程方式复制文本?

【问题讨论】:

标签: javascript browser cross-browser


【解决方案1】:

复制命令过去在除 IE 之外的所有浏览器中都受到保护(在其他浏览器中不起作用)。要求用户使用 Ctrl+C 是一种常见的解决方法。

从 Firefox 41(2015 年 9 月)、Chrome 42(2015 年 4 月)和 Opera 29(2015 年 4 月)开始,当从某些受信任的用户(用户-triggered) 事件,例如响应按钮单击而触发的事件。

来自 MDN 的compatibility table, 和 W3C bug 提供更多信息。

【讨论】:

  • 是的,但我不想自己按Ctrl+C,正在寻找以编程方式执行此操作的解决方案
  • 没有提升的权限是不可能的(例如,在这个答案中提到execCommand),因为允许任意剪贴板注入被认为是一种安全漏洞(“剪贴板中毒”)。我正在与浏览器供应商合作,至少在现代常青浏览器中启用点击复制功能,以便我们最终淘汰 ZeroClipboard(或将其用作旧浏览器的 polyfill)。
  • @JamesM.Greene,您能链接到您向浏览器供应商提交的任何错误吗?
  • @JeffreyYasskin 现在它只是作为公共 WebApps 工作组剪贴板 API 规范的错误提交(由规范的编辑在我们的邮件列表讨论后提交):w3.org/Bugs/Public/show_bug.cgi?id=23235 不幸的是,大多数浏览器供应商可能会拒绝一个错误报告来实现这个,直到规范错误被解决并且这个功能成为活动规范的一部分,并且编辑器还没有能够解决它。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
相关资源
最近更新 更多