`
cjc
  • 浏览: 680299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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

方案一:利用“window.clipboardData”

代码示例:

 

if (window.clipboardData) {
window.clipboardData.clearData();
window.clipboardData.setData("Text", txt)

};
 

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

image

 

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

image

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

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

 

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

方案三:javascript + flash

代码示例:

varflashcopier ='flashcopier';
if(!document.getElementById(flashcopier)) {
vardivholder = document.createElement('div');
divholder.id = flashcopier;
document.body.appendChild(divholder);
}
document.getElementById(flashcopier).innerHTML ='';
vardivinfo ='<embed src="clipboard.swf" FlashVars="clipboard='+ text2copy +'"
width="0" height="0" type="application/x-shockwave-flash"></embed>';
document.getElementById(flashcopier).innerHTML = divinfo;}
 

评论: 这个方案是一个最流行的方法,著名的Clipboard Copy 解决方案 利用一个clipboard.swf作为桥梁,复制内容到剪贴板。原理是:创建一个隐藏的flash文件,同时给给flash的变量FlashVars 赋值“clipboard=..”,通过这个赋值flash就会把复制的内容放到剪贴板。这个方法兼容IE、Firefox、OperachromeSafari ,真可谓“万能”的解决方案。浏览器Flash的安装率非常高,这几乎是一个完美的解决方案。

clipboard.swf 的下载地址:http://watch-life.googlecode.com/files/clipboard.swf

但是,世界上有完美的事么?这个方法只支持flash 9 ,不支持最新的flash 10。因为flash10中规定了只有在swf上进行了真实的操作(比如鼠标点击)才能访问剪切板,而上述方法只是使用了一个隐藏的swf文件,通过 javascript操作flash的剪贴板,用户并没有对swf文件进行真实的操作,因此这个方法也就失效了。

那么如何解决这个“真实操作”的问题呢?可以使用一个JavaScript库:Zero Clipboard , 利用这个js库可以支持利用flash 10 实现复制到剪贴板。这个方法原理是在一个透明的flash(对用户来说是不可见的)上覆盖一个dom元素比如button或div,当点击这个dom时, 实际点击的是flash,从而访问flash的剪贴板。真够曲折的。:-)

具体的实现详见如下链接:

DEMO页面 : http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/

Zero Clipboard项目主页: http://code.google.com/p/zeroclipboard/

 

支持浏览器: Firefox1.5 firefox2.0 firefox3.0 IE5.5 IE6.0 IE 7.0 opera 8 opera 9 chorme 1.0 chorme 2.0 safari 3

4
0
分享到:
评论
1 楼 yvonxiao 2009-11-19  
Zero Clipboard是我发现目前为止行得通的方案了,谢了。

相关推荐

    兼容各浏览器的复制到剪贴板功能

    "兼容各浏览器的复制到剪贴板功能"这个实例就是一个解决这个问题的方案,通过结合JavaScript和Flash技术,实现了在各种主流浏览器上的兼容性。 JavaScript是一种广泛使用的客户端脚本语言,它可以在用户的浏览器上...

    ZeroClipboard解决跨浏览器复制到剪贴板的问题

    标题中的“ZeroClipboard解决跨浏览器复制到剪贴板的问题”是指在网页开发中,使用ZeroClipboard这个开源库来实现跨浏览器的文本复制功能。在Web应用程序中,由于浏览器的安全限制,JavaScript无法直接操作用户的...

    跨浏览器的剪贴板访问解决方案.docx

    **zClip** 是一个利用Flash来解决跨浏览器剪贴板访问问题的免费项目。其工作原理是在目标元素上叠加一个透明的Flash对象。当用户点击目标元素时,实际上是激活了Flash对象,后者再利用内置的剪贴板访问接口实现复制...

    jquery.zclip复制内容到剪贴板兼容各浏览器

    另外,也可以关注并使用像clipboard.js这样的现代剪贴板解决方案,它们基于`Clipboard API`,并提供了良好的浏览器兼容性和易用性。 总结,jQuery.zclip是一个有效的解决跨浏览器内容复制到剪贴板问题的工具,但在...

    js 复制代码 兼容多种浏览器

    "js 复制代码 兼容多种浏览器"这个主题就聚焦于如何使用JavaScript来实现在不同浏览器上,包括IE、Firefox、Opera和Chrome,都能够稳定地复制文本到剪贴板。 首先,我们了解JavaScript的限制。在早期的浏览器中,...

    jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板

    它使用Flash作为跨浏览器的粘贴复制解决方案,因为Flash在那时拥有广泛的兼容性。当用户点击绑定有Zclip的按钮时,Zclip会创建一个透明的Flash对象覆盖在需要复制的文本上,然后模拟鼠标选择操作,从而实现文本的...

    js 复制到剪贴板 ,兼容支持火狐firefox 和 ie

    总结来说,实现JavaScript在Firefox和IE浏览器上复制到剪贴板的功能,需要根据浏览器的不同特性选择合适的解决方案,如使用`ZeroClipboard`库来兼容旧版浏览器,或者在现代浏览器中利用`Clipboard API`。理解这些...

    实现复制到剪贴板功能

    在JavaScript的世界里,复制文本到剪贴板的功能是常见的需求,尤其在网页应用中,比如复制链接、代码或用户信息等。"zclip"是一个专门为此目的设计的jQuery插件,它能帮助开发者轻松实现这一功能,并且具有良好的...

    Zero Clipboard - 跨浏览器兼容的“复制到剪贴板”功能

    Zero Clipboard 利用 Flash 进行复制,之前有 Clipboard Copy 解决方案,其利用的是一个隐藏的 Flash,但最新的 Flash Player 10 只允许在 Flash 上进行操作才能启动剪贴板,所以 Zero Clipboard 对此进行了改进,用...

    使用clipboard.js实现页面内容复制到剪贴板

    它使得在浏览器环境中实现复制到剪贴板的操作变得简单而直观。 **1. Clipboard.js的基本用法** 首先,你需要在HTML文件中引入clipboard.js库。如果你下载了压缩包`clipboard.js-master`,其中应该包含`dist/...

    兼容主流浏览器的JS复制内容到剪贴板

    这个方案是一个最流行的方法: 著名的Clipboard Copy解决方案 利用一个clipboard.swf作为桥梁,复制内容到剪贴板。 原理是:创建一个隐藏的flash文件,同时给给flash的变量FlashVars 赋值“clipboard=..”,通过这个...

    react-reactc2c高性能和轻量级复制到剪贴板组件的react组件

    在React生态系统中,开发人员经常需要创建用户友好的交互功能,其中之一就是复制文本到剪贴板。`react-c2c`组件就是为了解决这个问题而设计的,它是一款专为React应用打造的高性能且轻量级的复制到剪贴板组件。这个...

    ZeroClipboard实现兼容多浏览器复制

    这个库尤其重要,因为浏览器的安全策略通常限制了JavaScript直接访问剪贴板,而ZeroClipboard通过Flash技术绕过了这一限制,提供了兼容多种浏览器的解决方案。 首先,让我们深入了解一下ZeroClipboard的工作原理。...

    兼容各浏览器的JS点击复制2018年

    具体到复制操作,我们可以使用`'copy'`命令: ```javascript function copyText(textToCopy) { const dummy = document.createElement('input'); document.body.appendChild(dummy); dummy.value = textToCopy; ...

    js jquery复制到剪切板,绝对能用,兼容360 ie 火狐等浏览器

    总的来说,这个解决方案通过jQuery和适当的浏览器特定的代码,实现了在多种浏览器上复制文本到剪贴板的功能,包括对IE的兼容处理。确保在不同环境下都能提供一致的用户体验,这是Web开发中一个重要的考虑因素。

    clipboard复制当前链接/网址/url ,兼容所有浏览器,移动端也适用

    "clipboard复制当前链接/网址/url ,兼容所有浏览器,移动端也适用" 这个主题关注的是一个跨平台、跨设备的解决方案,旨在方便用户无论在桌面端还是移动端都能轻松地获取并分享网页地址。下面将详细探讨这一功能实现...

    ZeroClipboard-JS实现复制到剪贴板功能

    ZeroClipboard是一个流行的JavaScript库,它利用浏览器的Flash插件来实现跨浏览器的复制到剪贴板功能。本文将详细介绍如何使用ZeroClipboard库以及它的核心原理。 首先,让我们理解一下ZeroClipboard的工作机制。...

    一段多浏览器的&quot;复制到剪贴板&quot;javascript代码.docx

    本文将详细介绍一段多浏览器兼容的“复制到剪贴板”JavaScript代码,该代码能够很好地支持IE、Firefox等主流浏览器。 ```javascript function copyToClipboard(txt) { if (window.clipboardData) { // IE浏览器 ...

    jquery.zclip-JS实现复制到剪贴板功能

    总的来说,jQuery.zclip提供了一种简单而实用的方式来实现在JavaScript中复制到剪贴板的功能,尤其适合对旧版浏览器的兼容性有较高要求的项目。然而,随着技术的发展,开发者应当关注更现代的解决方案,以适应未来的...

    js插件zClip实现复制到剪贴板功能

    **JavaScript 插件 zClip 实现复制到剪贴板功能** 在 Web 开发中,有时候我们需要为用户提供方便快捷地复制文本到剪贴板的功能。zClip 是一个 JavaScript 插件,它允许用户通过简单的点击操作就能实现这个需求。...

Global site tag (gtag.js) - Google Analytics