document.execCommand复制命令不起作用或其他解决方案?

Dev*_*v01 4 javascript browser cross-browser

我正在做的是以编程方式从网页中选择所有文本,然后将其复制。全选功能适用,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');

    }
});
Run Code Online (Sandbox Code Playgroud)

这是关于JsBin的示例

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

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

Kon*_*nev 5

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

从Firefox 41(2015年9月),Chrome 42(2015年4月)和Opera 29(2015年4月)开始,当从某些受信任的(由用户触发)触发时,大多数主流浏览器中的默认情况下,复制命令就不再可用事件,例如响应按钮单击而触发的事件。

MDN 的兼容性表和W3C 错误提供了更多信息。

  • 是的,但我不想自己按下Ctrl + C,寻找以编程方式执行此操作的解决方案 (4认同)
  • @JeffreyYasskin现在,它只是作为公共WebApps工作组剪贴板API规范的错误提交(在我们的邮件列表讨论之后,由规范的编辑者提交):https://www.w3.org/Bugs/Public/show_bug.cgi? id = 23235不幸的是,大多数浏览器供应商可能会拒绝提供bug报告,以解决此问题,直到解决规范bug且此功能成为有效规范的一部分,并且编辑器仍无法解决该问题。:( (2认同)