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

Top半边天

Top半边天

2016-02-19 16:15

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

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

  方案一:利用“window.clipboardData”

  代码示例:

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

  if (window.clipboardData) {

  window.clipboardData.clearData();

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

  };

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

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

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

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

  代码示例:

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

  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://m.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://m.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://m.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

  代码示例:

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

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

展开更多 50%)
分享

猜你喜欢

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

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

把图片框的完整内容复制到剪贴板

编程语言 网络编程
把图片框的完整内容复制到剪贴板

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

一段多浏览器的"复制到剪贴板"javascript代码

Web开发
一段多浏览器的"复制到剪贴板"javascript代码

一直都需要的复制到系统剪贴板之IE,firefox兼容版

Web开发
一直都需要的复制到系统剪贴板之IE,firefox兼容版

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

浏览器去掉“允许此网页访问剪贴板”提示

浏览器
浏览器去掉“允许此网页访问剪贴板”提示

单击按钮复制定义好的内容到剪贴板

Web开发
单击按钮复制定义好的内容到剪贴板

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

为什么我的win7耗电速度变快了那么多

为什么我的win7耗电速度变快了那么多

Delphi“流”实现文件加密器

Delphi“流”实现文件加密器
下拉加载更多内容 ↓