BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari 中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象
2014-06-08 23:42
1141 查看
http://www.w3help.org/zh-cn/causes/BX2001
Chrome 和 Safari 中存在类似的 Clipboard 对象,且有与 IE 中类似的方法,但其功能尚未实现;
Firefox 和 Opera 不支持这类对象。
有时候页面作者在 HTML 页面中也希望可以通过某种方式能否有权访问系统剪贴板,但处于安全的考虑,不是所有浏览器都提供实现访问剪贴板的接口。
如以下代码:
上面的代码只有在 IE 中可以将“hello”这个字符串复制到操作系统的剪贴板中,“Text”表明作为文本,在其他浏览器中则产生如下报错:
出现此错误是因为 window.clipboardData 为 IE 专有,其他浏览器均没有此对象。更多关于 clipboardData 对象,参见 MSDN:clipboardData Object。
在 IE7 及更高版本的 IE 浏览器中,默认情况下会出现访问剪贴板的提示,通过浏览器菜单“工具 -> internet 选项 -> 安全 -> 自定义级别” 步骤可以设置剪贴板访问提示。
![](http://www.w3help.org/tests/BX2001/IE7_safety.gif)
下表列出了其他非 IE 的主流浏览器对访问剪贴板的支持情况:
标准参考
无问题描述
IE 支持使用 window.clipboardData 对象内的一系列方法访问系统剪贴板;Chrome 和 Safari 中存在类似的 Clipboard 对象,且有与 IE 中类似的方法,但其功能尚未实现;
Firefox 和 Opera 不支持这类对象。
造成的影响
若作者在需要访问剪贴板时仅仅考虑 IE 浏览器而使用了其专有的 clipboardData 对象,则在其他浏览器中可能导致功能无效且代码报错。受影响的浏览器
非 IE 浏览器 |
---|
问题分析
现代操作系统中均提供了系统剪贴板(clipboard),它允许用户在不同的运行中的应用程序之间传递不同类型的数据。如:复制、粘贴等等。剪贴板已经成为最常用的一种不同进程间交换数据的方式。有时候页面作者在 HTML 页面中也希望可以通过某种方式能否有权访问系统剪贴板,但处于安全的考虑,不是所有浏览器都提供实现访问剪贴板的接口。
如以下代码:
<script> window.clipboardData.setData("Text", "Hello"); </script>
上面的代码只有在 IE 中可以将“hello”这个字符串复制到操作系统的剪贴板中,“Text”表明作为文本,在其他浏览器中则产生如下报错:
Firefox | window.clipboardData is undefined |
---|---|
Chrome | Uncaught TypeError: Cannot call method 'setData' of undefined |
Safari | TypeError: Result of expression 'window.clipboardData' [undefined] is not an object. |
Opera | Statement on line 2: Cannot convert undefined or null to Object stacktrace |
在 IE7 及更高版本的 IE 浏览器中,默认情况下会出现访问剪贴板的提示,通过浏览器菜单“工具 -> internet 选项 -> 安全 -> 自定义级别” 步骤可以设置剪贴板访问提示。
![](http://www.w3help.org/tests/BX2001/IE7_safety.gif)
下表列出了其他非 IE 的主流浏览器对访问剪贴板的支持情况:
Chrome Safari | Clipboard 对象: 虽能看到存在此接口,但其内的方法并未实现其功能,所以在 JavaScript 中无法调用。 |
---|---|
Opera | 无操作剪贴板的对象。 |
Firefox | Firefox 中由于对用户权限设置较高,需要修改 Firefox 的配置文件以允许浏览器支持剪贴板操作。较通用的做法是:try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将 'signed.applets.codebase_principal_support'设置为'true'"); } 在访问剪贴板上,首先修改 Firefox 的配置文件,若无法修改,则通知用户自行进入管理界面修改配置文件参数。然后才有权限对剪贴板进行操作。 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); alert(" 复制成功!") |
解决方案
判断浏览器类型,若不是 IE 则弹出提示,告诉用户当前浏览器不能访问剪贴板。如:if (navigator.userAgent.indexOf("MSIE") == -1) { alert("您的浏览器不支持此功能,请手工复制文本框中内容"); return false; }
相关文章推荐
- [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
- jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
- [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器
- CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera
- CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera 6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、Fi...
- 支持所有浏览器的复制文本到剪切板的ASP代码(IE/Firefox/Opera/netscape/chrome/safari)
- 使用activex、NPAPI插件实现web系统截屏(IE,chrome,firefox截屏控件、web截屏)
- 火狐,chrome和IE都支持的复制剪切板功能window.clipboardData.setData
- 为何firefox不支持insertRow和insertCell。我如何能让firefox显示和ie显示的效果一样?iframe实现高度自适应,兼容FF、Opera、Safari
- 目前Lodop支持IE系列、IE内核系列(遨游、360、世界之窗、腾讯TT、搜狗等)浏览器,以及Firefox(火狐)系列、Chrome(谷歌)系列、Opera系列、Safari系列等Windows下
- 利用jQuery srollTop()函数实现类似锚点的定位效果-兼容chrome,firefox,IE,safari
- jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
- CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera
- IE/Firefox/Chrome/Opera/Safari 缓存文件夹访问
- CSS Hack技术详解,支持IE 6-11、Chrome、FireFox、Safari、Opera 6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、FireFox、Safari、Opera6-11、Chrome、FireFox、Safari、Opera
- css中@media写法在ie 、firefox、Opera、Chrome、Safari 浏览器中的支持
- css页面变灰度兼容ie、firefox、chrome、opera、safari实现样式
- (轉)js判断浏览器(支持区分ie、firefox、opera、chrome、safari)