当前位置: 首页 > 面试题库 >

execCommand('copy')在Ajax / XHR回调中不起作用?

范俊逸
2023-03-14
问题内容

(使用Chrome 44测试)

所需行为 :发出XHR请求,将结果放入文本区域,选择文本,然后复制到剪贴板。

实际行为 :成功执行XHR请求后,将结果放在文本区域中并选择它,但是无法将结果复制到剪贴板。但是,如果我在XHR回调之外启动副本,则可以正常工作。

示例html页面:

var selectAndCopy = function() {

  // Select text

  var cutTextarea = document.querySelector('#textarea');

  cutTextarea.select();

  // Execute copy

  var successful = document.execCommand('copy');

  var msg = successful ? 'successful' : 'unsuccessful';

  console.log('Cutting text command was ' + msg);

};



var fetchCopyButton = document.querySelector('#fetch_copy');

fetchCopyButton.addEventListener('click', function(event) {

  var xhr = new XMLHttpRequest();

  xhr.open('get', 'http://httpbin.org/ip');

  xhr.onreadystatechange = function() {

    if (xhr.readyState === 4) {

      if (xhr.status === 200) {

        // Set text

        var textarea = document.querySelector('#textarea');

        textarea.value = xhr.responseText;



        selectAndCopy();

      }

    }

  };

  xhr.send();

});



var copyButton = document.querySelector('#copy');

copyButton.addEventListener('click', function(event) {

  selectAndCopy();

});


<html>



<head>

</head>



<body>

  <p>

    <textarea id="textarea">Hello, I'm some text!</textarea>

  </p>

  <p>

    <button id="fetch_copy">Fetch Data and Copy Textarea</button>

    <button id="copy">Copy Textarea</button>

  </p>

</body>



</html>

如果按“获取数据并复制文本区域”按钮,则数据已成功获取但未复制。如果按“复制文本区域”按钮,则文本将按预期复制。我尝试了请求/复制的许多组合以尝试使其正常工作,但无济于事(包括在获取数据后以编程方式按下复制按钮)。有人知道这是怎么回事吗?这是一项安全功能吗?

我不希望用户尽可能按下两个按钮来进行获取和复制。


问题答案:

您只能直接响应受信任的用户操作(例如click事件)而触发向系统剪贴板的复制。

规格:http://www.w3.org/TR/clipboard-apis/#integration-with-rich-text-
editing-apis



 类似资料:
  • 问题内容: 已编辑 我有一个ajax调用(使用),它调用以下php脚本。 这持续了40秒。 如果我关闭触发调用的浏览器窗口, 即使我显式发送了一个字符串并刷新了缓冲区 ,它仍然返回false ! 请问有人在这里回答吗? 问题答案: 您将需要添加“ ignore_user_abort(true);” 在PHP脚本之上,并在从脚本中回显某些内容后调用“ ob_flush()”(有关原因,请参见 PHP

  • 问题内容: 我有一个Ajax脚本,可以将一些数据发送到外部URL。外部URL托管在同一服务器上,但是域与ajax调用的源不同。 这在Firefox和Chrome中完美运行。但是,在IE中,ajax调用不会通过,并且Return False函数也不起作用(一旦ajax调用失败)。 下面是我的代码: 当我尝试从ajax网址中删除http://时,返回false确实有效。 任何帮助,将不胜感激。谢谢 问

  • 我有一个流定义了一个正确提交数据的帮助器

  • 问题内容: 我制作了一个Jquery函数,该函数(目前)会动态调用该函数,并显示警告。与Firefox,铬:它的作品!当我尝试IE7(第一次)时,它失败了。如果我重新加载页面(F5)并重试,则可以!o_O 我终于明白为什么会这样。在我的旧网站中,我使用了jquery-1.3.2.min.js库。在此我使用jquery-1.4.2.js,实际上它不起作用。那么这是什么一回事?这个新版本中有错误吗?

  • 问题内容: 我正在编写ajax Web应用程序,但是由于任何原因,当我在Internet Explorer 9(IE9)中对内部数据服务执行GET时,它都无法正常工作。同样的调用在Chrome,Firefox和Safari中也可以正常工作。我正在使用本地主机Web服务器(沼泽)进行开发,并且正在与要尝试的数据服务在同一网络上进行开发。我正在使用Jquery 1.8.1(我返回了几个版本,但仍然看到

  • 问题内容: 我有一个问题: 虽然我从另一个带有ajax的页面调用内联脚本(也使用jQuery),但似乎不再定义jQuery(?),并且我无法使用任何jQuery函数,应该使用(根据内联脚本)。 它基本上是新闻列表,其中包含指向特定新闻项目的链接。我现在更喜欢使用内联脚本,因为在其他地方不需要此功能。 如您所见,我只是在调用另一个页面的一部分并将其内容附加到页面上。 当我加载整个页面(不是页面的一部