兼容多种浏览器“复制到剪贴板”的解决方案

2016-02-19 16:15 3 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的兼容多种浏览器“复制到剪贴板”的解决方案教程,一起来看看吧!超容易上手~

【 tulaoshi.com - Web开发 】

  昨天在也一个php程序的时候,要实现“复制到剪贴板”的功能,由于安全问题,浏览器的限制越来越严,实现的方法也越来越有限,这个简单的功能要想实现兼容不同的浏览器还真不容易,根据网上的一些资料结合我测试的经验,相关解决方案如下:

  方案一:利用“window.clipboardData”

  代码示例:

  if (window.clipboardData) {

  window.clipboardData.clearData();

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

  };

  评论:这个方案只适合IE浏览器,同时在IE7下有个如下安全提示的对话框。

  由于IE的浏览器的占有率比较大,这个方案是使用最广的,也是最简单的方法。

  支持浏览器:IE5.5 IE6.0 IE7.0

  方案二:利用“Components.interfaces.nsIClipboard”

  代码示例:

  if (window.netscape) {

  try {

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

  } catch (e) {

  if (flag == 0) {

  alert("You are using the Firefox browser, copy the function browser refuse!

  nPlease in the browser address bar enter'about:config' and Enter n and set'signed.applets.codebase_principal_support' to 'true'");

  } else {

  alert("你使用的是Firefox 浏览器,复制功能被浏览器拒绝!n请在浏览器地址栏输入'about:config'

  并回车n然后将'signed.applets.codebase_principal_support'设置为'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();

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  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 false;

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

  }

  (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();

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  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 false;

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

  }

  (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();

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  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 false;

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

  }

  评论:这个方案只适合Firefox,同时也有安全的问题,如果想使用这个方法,必须手动开启Firefox的一个配置:signed.applets.codebase_principal_support。方法是:在地址栏输输入“about:config”,设置“signed.applets.codebase_principal_support”为true,默认该项是false。

  这个方法虽然可以在Firefox使用,但让一个普通用户去开启这个配置似乎太专业了。

  把这个方案和方案一结合,可以适用80%以上的用户。

  支持浏览器:Firefox1.5  firefox2.0  firefox3.0

  方案三:javascript + flash

  代码示例:

  var flashcopier = 'flashcopier';

  if (!document.getElementById(flashcopier)) {

  var divholder = document.createElement('div');

  divholder.id = flashcopier;

  document.body.appendChild(divholder);

  }

  document.getElementById(flashcopier).innerHTML = '';

  var divinfo = 'embed src="clipboard.swf" FlashVars="clipboard=' + text2copy + '"

  width="0" height="0" type="application/x-shockwave-flash"/embed';

  document.getElementById(flashcopier).innerHTML = divinfo;}

来源:https://www.tulaoshi.com/n/20160219/1611431.html

延伸阅读
标签: 浏览器
如何去除IE及IE内核浏览器剪贴板操作的警告   相信有些用户,在使用浏览器的时候,想复制点东西,一点复制,就弹出 每次都弹出这个其实是有点烦的,那么如何解决这个问题呢,小编给你支个招。打开Internet选项,在进入安全选项卡,然后选择自定义级别按钮,如图: 接下来找到脚本子选项,然后在允许对剪贴板选项中,...
在Form1的.h的private加上: void __fastcall ClipboardChanged(TMessage& Msg); 在Form1的.h的public加上: BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DRAWCLIPBOARD,TMessage,ClipboardChanged) END_MESSAGE_MAP(TForm) 在Form1的.cpp内加上: void __fastcall TForm1::ClipboardChanged(TMessage& M...
将数据导出到Excel的方法有多种,速度有快慢之分,我用过三种方法,速度都比较快,下面的一种是通过剪贴板进行,不过在个别W2K以上的系统,由于字符集编码不同,中文内容导出到Excel后可能变成乱码。 //显示进度条面板 procedure ShowProgress(Min, Max, Position: integer); begin     pnlProgress.Left :...
标签: windows 操作系统
IE作为Windows系统中一个重要部分,是我们使用最多同时也是麻烦最多的部分,下面是笔者在使用过程中发现并解决了的四个比较典型的故障。 故障一:无法改变IE的安全等级 现象:打开桌面上IE的鼠标右键菜单并选择“属性”,切换至“安全”标签,发现“自定义级别”和“默认级别”按钮变成灰色不可选状态,使得我们不能改变IE的...
标签: 浏览器
IE浏览器如何取消“确实允许网页访问剪贴板”对话框   1、打开IE浏览器,在工具中选择Internet选项,弹出的对话框选择安全选项卡。点击底部的自定义级别...按钮(如图)。 2、在自定义级别对话框中进行安全设置,找到允许对剪贴板进行编程访问,将默认的提示修改为启用。 3、点击确定按钮,会弹出提示确实要更改改区域的设置...

经验教程

248

收藏

6
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部