JavaScript操作剪贴板出现OpenClipboard Failed异常
JavaScript操作剪贴板出现OpenClipboard Failed异常,网上查找无果,基本上是CS客户端程序操作剪贴板出现此异常。请教诸位是何原因?有何解决办法?
IE7和IE8下都会出现这个问题。代码如下:
/* 功能: 将传入的文本复制到剪贴板上 返回值: 复制到剪贴板 结果(Boolean) */ function fnCopyText(ControlText) { try { event.returnValue = false; //var bResult = e.dataTransfer.setData("Text", ControlText); window.clipboardData.clearData("Text"); //清除剪贴板数据 //以文本格式给 window.clipboardData 对象赋予数据。 var bResult = window.clipboardData.setData("Text", ControlText); //document.execCommand("copy");//执行命令方式 //校验是否复制成功: 以从剪贴板取得的数据与源数据是否相同为准 var s = window.clipboardData.getData("Text"); // || (e.dataTransfer ? e.dataTransfer.getData("Text") : ""); if(s == ControlText) { bResult = true; } else { bResult = false; } } catch (e) { //IE下window.clipboardData.setData和getData会报 //"OpenClipboard Failed"错误,但可能复制成功了 //估计是多个语句同时访问(读取/设置/清空)剪贴板所致 //alert(e.message); } finally { if(bResult) window.alert(ControlText);//如果复制成功不需要提示, 可以将此句注释. '复制选定文本到剪贴板成功: ' else window.alert("复制选定文本到剪贴板失败,请重试!"); return bResult; } }
出现异常的语句可以是window.clipboardData.setData和window.clipboardData.getData,出现错误的概率大概是10%左右。个人猜测是多个语句同时访问(读取/设置/清空)剪贴板所致。这段语句很平常,网上到处都是用这种方法进行剪贴板操作,但是为什么没有人提及这个错误?