BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari 中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象

http://www.w3help.org/zh-cn/causes/BX2001

标准参考

问题描述

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

出现此错误是因为 window.clipboardData 为 IE 专有,其他浏览器均没有此对象。更多关于 clipboardData 对象,参见
MSDN:clipboardData
Object

在 IE7 及更高版本的 IE 浏览器中,默认情况下会出现访问剪贴板的提示,通过浏览器菜单“工具 -> internet 选项 -> 安全
-> 自定义级别” 步骤可以设置剪贴板访问提示。

下表列出了其他非 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;
    }

BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari
中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象

时间: 2024-08-03 19:17:16

BX2001: IE 支持使用 window.clipboardData 访问系统剪贴板,Chrome 和 Safari 中存在类似的 Clipboard 对象但尚未实现,Firefox 和 Opera 不支持这类对象的相关文章

window.clipboardData实现剪切板操作总结

window.clipboardData的作用是在页面上将需要的东西复制到剪贴板上,提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用. 三个方法 (1)clearData(sDataFormat) 删除剪贴板中指定格式的数据.sDataFormat:"text","url" (2)getData(sDataFormat) 从剪贴板获取指定格式的数据. sDataFormat:"text","url" (3)setDat

Win7系统上面Tex live中利用fontspec包直接访问系统字体

目前,网络给给出的方法大部分针Linux系统上面的Tex live,而对于在Windows系统上面安装的Tex live如何直接访问系统字体很少描述,并且讲解的不清.本文就给出一种简单的直接访问系统字体的例子,从中我们可以看出XeLaTex的强大的支持中文的能力.为了讲解的更加清晰,本文附加了相应的截图. 本文方法所在的环境为: 操作系统:Windows 7 LaTeX编译环境:XeLaTeX 3.14159265-2.6-0.99992 (TeX Live 2015/W32TeX) 确定你想使

009_01访问系统短信数据库

1 package com.example.visit_sms_db; 2 3 import android.app.Activity; 4 import android.content.ContentResolver; 5 import android.content.ContentValues; 6 import android.database.Cursor; 7 import android.net.Uri; 8 import android.os.Bundle; 9 import an

window主机访问Linux主机通过samba服务共享的目录 和Linux主机挂载window主机共享目录到本地

一.window主机访问Linux主机通过samba服务共享的目录 1.测试环境 物理主机: win8 虚拟主机: rhel 5.8 网络模式: 桥接 安装方式采用本地配置的yum源安装samba 关闭了selinux 2.配置好yum源 mount -r /dev/cdrom /media/cdrom   //挂载光盘镜像 3.首先安装samba3x samba3x-client samba3x-common samba3x-swat yum -y install samba3x samba3

如何在XENDESKTOP7中启用RECEIVER FOR HTML5,允许支持HTML5的浏览器访问虚拟桌面

摘要 Receiver for HTML5托管在StoreFront服务器上,允许用户通过Web浏览器访问虚拟桌面和托管的应用.XenDesktop和XenApp提供的资源聚合在StoreFront Store上,用户通过Receiver for Web site获取.在Web站点上启用Receiver for HTML5,用户无需在他们的设备本地Citrix Receiver即可通过他们的Web浏览器直接访问桌面和应用.本文将讲述如何在XenDesktop7中启用Receiver for HT

小米2S 中文和英文支持TWRP,真实双系统支持

经过我几天的努力小米2S的TWRP 的功能已经完美了. 支持功能 : 中文和英文显示能相互切换 真实双系统功能已经完成95%. 刷入手机方法.由于时间原因我只制作了img文件.没有制作成卡刷包格式. 刷入方法用 Fastboot 命令: fastboot flash recovery recovery.img fastboot reboot 源代码地址:https://github.com/sndnvaps/android_bootable_recovery_twrp 发布日期 2014-08-

TypeError: window.clipboardData is undefined

问题:javascript实现复制到剪切板,用ff浏览器显示TypeError: window.clipboardData is undefined <script language="JavaScript"> function copyToBoard(id) { var text=document.getElementById(id).value; if (window.clipboardData.setData("text",text)) {aler

自定义集合支持使用 foreach循环访问该集合

自定义集合支持使用 foreach循环访问该集合,需要实现 IEnumerable 和 IEnumerator 接口. using System;using System.Collections;public class Person{   public Person(string fName, string lName)   {      this.firstName = fName;      this.lastName = lName;   }   public string firstN

【转】【链接】SpringBoot配置SSL同时支持http和https访问

SpringBoot配置SSL同时支持http和https访问:https://blog.csdn.net/qq_38288606/article/details/89478353#comments 原文地址:https://www.cnblogs.com/xiaostudy/p/12358297.html