• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗中...

曾经的程序员。ASP.NET/C#, JavaScript, PL/SQL, T-SQL; 工具: VS2003/2005, Oracle, SQLServer; 偶尔写点CSS, 批处理.
头脑中经常有新想法, 可惜没有去实现.
Never give up.
Never get into a fight with a pig. Both of you will get dirty. But the pig actually enjoys it.
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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%左右。个人猜测是多个语句同时访问(读取/设置/清空)剪贴板所致。这段语句很平常,网上到处都是用这种方法进行剪贴板操作,但是为什么没有人提及这个错误?

posted on 2011-02-16 23:21  jes  阅读(2577)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3