我正在尝试以编程方式在Chrome(版本43)中使用execCommand将异步JSONP请求的结果复制到剪贴板。这里是一个代码段的逻辑:
loadContent()
function loadContent(callback) {
$.getJSON('http://www.randomtext.me/api/lorem/p-5/10-20?&callback=myFunc',function(result){
console.log('result=',result.text_out);
$("#container").html(result.text_out);
if (callback) {
callback();
}
});
}
function copyAjax() {
loadContent(copy);
}
function copy() {
var copyDivText = $('#container').text();
console.log('copyDivText=',copyDivText);
executeCopy(copyDivText);
}
document.addEventListener("DOMContentLoaded", function(){
document.getElementById("copy").onclick = copy;
});
document.addEventListener("DOMContentLoaded", function(){
document.getElementById("copyAjax").onclick = copyAjax;
});
// Copy text as text
function executeCopy(text) {
var input = document.createElement('textarea');
document.body.appendChild(input);
input.value = text;
input.focus();
input.select();
document.execCommand('Copy');
input.remove();
}
我知道启动Chrome的内部版本43会使用带有剪贴板的execCommand。但是,问题在于您需要在用户发起的事件(提升权限的事件)的执行期间执行此操作。这是基于ZeroClipboard
Flash的解决方案所具有的类似限制。除了得到不可能的答案(这是我现在考虑的问题)之外,还有其他我想到的最后选择(警告,它们都是Hail Mary
Passes
):
我已经看过成问题,#2,如本,但他们并没有解决异步场景。如果您能找到其他可行的解决方案(或对现有解决方案进行调整),请告诉我。
这是基于您的代码段的工作超时方法:
HTML:
<div id="container">
Enter Text To Copy</br>
<textarea id="clipboard"></textarea>
</div>
<input type="button" value="Copy" id="copy"/>
JS:
var timeout = 600; // timeout based on ajax response time
var loaded = false;
function loadContent() {
loaded = false;
$.getJSON('http://codepen.io/gkohen/pen/QbvoQW.js',function(result){
document.getElementById("clipboard").value = result.lorem;
loaded = true;
});
}
// Copy text as text
function copy() {
clipboard = document.getElementById("clipboard");
if (!loaded || clipboard.value.length == 0) {
alert("Ajax timeout! TIP: Try to increase timeout value.");
return;
}
clipboard.focus();
clipboard.select();
if (document.execCommand('Copy'))
alert("Successfuly coppied to clipboard!");
// set defaults
clipboard.value = "";
loaded = false;
}
document.addEventListener("DOMContentLoaded", function(){
document.getElementById("copy").onmousedown = loadContent;
document.getElementById("copy").onclick = function() {
setTimeout(copy, timeout); // wait for ajax
}
});
主要问题是execCommand规范。关于安全性和可信操作有一些限制。因此,您必须进行事件调用复制和ajax调用。这可以通过固定的超时(上面的代码)或适当的方式(通过易碎的睡眠)来完成。这里提到了新的睡眠功能,也许可以通过clearTimeout将其修改为易碎的变体,但是我没有尝试。
问题内容: 我已经实现了回收卡视图,并想使用按钮单击方法来复制cardView的内容。cardview中有两个文本,我只想复制内容,不同的卡片不同。我怎样才能做到这一点?这是我的Cardview适配器。 v.content.getText()。toString(),无法解析内容。 问题答案: 尝试以下
如何将div中的文本复制到剪贴板?我有一个div,需要添加一个链接,将文本添加到剪贴板。有解决办法吗? 单击“复制文本”后,然后按CtrlV,必须粘贴该文本。
我使用的是ReactJS,当用户单击按钮时,我想将一些div内容复制到剪贴板。 我不明白为什么这段代码不会导致数据被复制到剪贴板。当redux store的真实内容来自div时,我从中获得了价值
我使用下面所示的jQuery将可内容div的内容复制到剪贴板。我需要能够将另一个div的内容附加到复制的内容,以便两个div的内容同时复制到剪贴板。 这是我目前拥有的代码: 我需要不仅能够复制“预览标题”的内容,还需要复制另一个名为“HiddenURLdiv”的div,以便同时将它们复制到剪贴板。
问题内容: 如何将BufferedImage存储到系统剪贴板中? 问题答案: 这是从这里获得的工作代码,已成功测试
问题内容: 在我的Go语言命令行应用程序中,我需要能够使用Go将某些文本片段复制到系统剪贴板。基本上类似于PyperClip,但适用于Go。 我正在寻找与平台无关的解决方案!任何帮助将是巨大的:) 问题答案: 一个项目(仅适用于Windows和Mac)似乎正在接近您想要的:。 提供复制和粘贴到剪贴板的Go。 剪贴板_linux.go类中提供Linux支持:系统命令的简单包装。 另一种方法:尝试利用