这是基于您的代码段的工作超时方法:
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 timevar loaded = false;function loadContent() { loaded = false; $.getJSON('http://prepen.io/gkohen/pen/QbvoQW.js',function(result){ document.getElementById("clipboard").value = result.lorem; loaded = true; });}// Copy text as textfunction 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将其修改为易碎的变体,但是我没有尝试。



