• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Joyce Liu
博客园    首页    新随笔    联系   管理    订阅  订阅
跨浏览器开发经验总结(四) —— 怎么写入剪贴板
IE、 Firefox可以支持JavaScript往剪贴板写入内容,Opera 、Safari、Chrome可以使用ActionScript往剪贴板写入内容

IE、 Firefox可以支持JavaScript往剪贴板写入内容

IE可以很方便的支持剪贴板内容写入命令,可以使用execCommand(),也可以利用window.clipboardData。

 

使用execCommand,需要先从页面选中要复制到剪贴板的内容,如以下代码:

var doc = obj.createTextRange();

doc.select();

doc.execCommand('copy');

 

使用window.clipboardData的方法如下,代码中同时实现了Firefox下写入剪贴板的功能:

if(window.clipboardData) //IE

              {

                window.clipboardData.clearData();

                window.clipboardData.setData("Text", txt);

              }             

              else if (window.netscape)

              {

                  try                   {                      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

                  }

                  catch (e)

                  {

                      alert("please visit 'about:config' and set signed.applets.codebase_principal_support as 'true'");

                      //提示用户开放浏览器的安全性设置 

                  }

                 

                  var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);

                  if (!clip)

                      return;

                  var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);

                  if (!trans)

                      return;

                  trans.addDataFlavor('text/unicode');

                  var str = new Object();

                  var len = new Object();

                  var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

                  var copytext = txt;

                  str.data = copytext;                 

       trans.setTransferData("text/unicode",str,copytext.length*2);

                  var clipid = Components.interfaces.nsIClipboard;

                  if (!clip)

                  return;                 

       clip.setData(trans,null,clipid.kGlobalClipboard);

}

以上代码可以实现在IE、Firefox中往剪贴版写入自定义内容,但是opera和webkit内核浏览器对安全性要求更高,不支持这种javascript直接操作剪贴板内容的方式,只能通过别的脚本语言“曲线救国”了。 

Opera 、Safari、Chrome使用ActionScript往剪贴板写入内容

具体的实现可以将原本的动作按钮用flex或flash实现其外观,替换原来的图片或文字按钮,然后在点击该按钮时,执行以下ActionScript脚本:

//从浏览器环境中获得需要写入到剪贴板的内容 

var s:String = String(ExternalInterface.call("getURL4Clipboard"));  //getURL4Clipboard是页面上return剪贴板内容的javascript方法

//设置剪贴板内容 

System.setClipboard(s);

//调用完成设置剪贴板内容后需要继续的JavaScript函数,比如提示用户信息等 

ExternalInterface.call("copyURLCompleted");  //copyURLCompleted是页面上的javascript方法,继续执行复制后的工作

作者:Joyce Liu
出处:http://www.cnblogs.com/joycel/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted on 2010-05-13 10:44  Joyce.L  阅读(2647)  评论(4)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3