阅读:16339回复:19
如何设计js代码,使得在ff中可以copy选中的文本
在ie中可以这样:
<script language=javascript> function CPtext(id){ var obj = document.getElementById(id); obj.select(); js=obj.createTextRange(); js.execCommand("Copy"); } </script> <input name="textfield" type="text" ID="CodeText1" value="hello"> <input type="button" onClick="CPtext('CodeText1')" name="Submit" value="复制到剪贴板"> 在firefox中呢?firefox不支持createTextRange 拜服能搞定的大侠! |
|
|
1楼#
发布于:2005-09-21 20:43
linux系统里是选择了文本就复制.. 在哪都行
linux有两个剪贴板,一个是选择就复制的,还一个是ctrl+c(也有可能是别的热键,取决程序了) windows里也有实现这样功能的软件,名字忘了,也是开源的. 我觉得这样的功能不该由网页里的代码实现...要是用户不喜欢怎么板?用户不感觉自己受到强迫吗?喜欢这个功能,自己装上软件就行了何必这么麻烦. 你觉得这个功能好跨平台吗?每个浏览器都支持? |
|
2楼#
发布于:2005-09-21 20:43
这样虽然可以复制了,但是也太复杂了嘛,
这样虽然可以复制了,但是也太复杂了嘛 |
|
3楼#
发布于:2005-09-21 20:43
/************************************************** http://www.krikkit.net/howto_javascript_copy_clipboard.html 将字符串maintext复制到剪贴板 **************************************************/ function setClipboard(maintext) { if (window.clipboardData) { return (window.clipboardData.setData("Text", maintext)); } else if (window.netscape) { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 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=maintext; 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); return true; } return false; } /************************************************** http://www.codebase.nl/index.php/command/viewcode/id/174 返回剪贴板的内容 **************************************************/ function getClipboard() { if (window.clipboardData) { return(window.clipboardData.getData('Text')); } else if (window.netscape) { netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); 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'); clip.getData(trans,clip.kGlobalClipboard); var str = new Object(); var len = new Object(); try { trans.getTransferData('text/unicode',str,len); } catch(error) { return null; } if (str) { if (Components.interfaces.nsISupportsWString) str=str.value.QueryInterface(Components.interfaces.nsISupportsWString); else if (Components.interfaces.nsISupportsString) str=str.value.QueryInterface(Components.interfaces.nsISupportsString); else str = null; } if (str) { return(str.data.substring(0,len.value / 2)); } } return null; } 至于如何获取textarea里选中的文字,参看 http://www.freewebs.com/yang1984/content.html |
|
4楼#
发布于:2005-09-21 20:43
可能我理解有误,但你举的例子 让我感觉 "其他人" 会这么说。 [quote="abc@home"] 而你则坚持不应该给用户决定,干脆不提供哪些会影响安全性的功能。对吗?[/quote] 是。 我的经验是,用户总是倾向于做出错误的选择,因为外在环境诱导(前面有人用的这个词很传神)用户这么做。 "是" 和 "否" 两种选择看似 50 vs. 50,但你做个调查,我保证用户点 "是" 的机会在 90% 以上。 用户无法理解那么复杂的东西,他只知道点 "是" 就能正常工作了。至于会导致的其它后果,他根本看不见。 好比安装软件,总是有一个 licenses 页面,要你点 "接受" 还是 "拒绝" -- 普通用户无论如何也无法理解里面的法律用语(我估计你 abc@home 也不行,呵呵),他能做的就是被动 "接受"。所以实际上根本没得选择,因为这跟问 你要死还是要活 类似。 目前的软件太复杂,必须有人帮用户决定,就象必须有律师帮我们处理法律事务。 |
|
5楼#
发布于:2005-09-21 20:43
你反复强调已经提供了某某功能,用户需要做的仅仅是善加使用,他们之所以中招,仅仅是由于用户智力低下、缺乏训练;我说的是,你不能也无法要求用户正确使用你那一套东西,你那一套东西是反人性的。 我说的是一些功能和安全性是不能兼得,必须取舍。最这情况下提供用户选举是唯一解决办法。只要设计得好,便不会有太大安全问题。我没说过任何用户智力低、缺乏训练等等。 而你则坚持不应该给用户决定,干脆不提供哪些会影响安全性的功能。对吗? |
|
|
6楼#
发布于:2005-09-21 20:43
有时很怪用户以管理员帐号登录.
在M$的Windows 上, 有些应用程序的不良设计会诱导用户以管理员帐号登录的. 以QQ为例, QQ将用户的个人资料包括聊天记录存放在QQ程序所在的文件夹上, 这时, 如果该文件夹所在的磁盘分区格式是 NTFS ,结果, 在默认设置下, 除了管理员, 普通用户的帐号是不能使用QQ的. 在Linux上, 就很少出现上面的情况. 因为linux中的应用程序通常将用户配置文件放在用户的主文件夹上, 至少 LumaQQ 如此. |
|
7楼#
发布于:2005-09-21 20:43
呵呵楼上的这条说得是我 “用户是永远用管理员账号登陆的人”,我知道不用管理员账号安全可换了别的账号上不了网,难道用非管理员账号登陆还需要再装一遍拨号软件吗?
|
|
8楼#
发布于:2005-09-21 20:43
上面的例子不太明显,这里再说一个,就是 Office 软件自动存盘功能。
我们都知道,Word 有个功能,就是每隔 5 分钟会自动帮用户存一下盘,这样万一死机不会一整天都白费工夫。 我们不能取消这个功能,代之以 在手册里写一句 用户应当记住每隔 5 分钟存盘一次,否则可能会将所做的修改全部丢失 就万事大吉。 用户不是闹钟,不可能达到这个要求。 |
|
9楼#
发布于:2005-09-21 20:43
abc@home,我们说的不是一回事。
你反复强调已经提供了某某功能,用户需要做的仅仅是善加使用,他们之所以中招,仅仅是由于用户智力低下、缺乏训练;我说的是,你不能也无法要求用户正确使用你那一套东西,你那一套东西是反人性的。 如果我设计一套软件,保证绝对安全,但是要求你记住 256 位数字的密码,你认为合理吗?现在用户就是被要求做这类事情。 一款安全的软件,仅仅仔细检查输入值保证不超过范围是不够的,必须从设计开始,就要基于这个高度真实的假定:绝大多数用户永远只会使用默认值。 软件开发人员的确给了用户一个相当有效的刹车,只不过它需要 1000 公斤的力才能踩下去,结果仅有 10% 的人能够正常使用,因此对 90% 的人来说等于不存在。 至于想用 FF 上跑 Intranet 的人,和我这样用 FF 浏览的人有什么关系呢?如果现有方案不能保证两者都可用,那么请重新设计一种方案,而不是说:就这样了,将就着用用吧。 用户不是 IT 专家。相反,用户是用 FF 下载完成后,却不知道文件存放在什么地方的人。用户是直到硬盘损坏,才想起来没有备份的人。用户是永远用管理员账号登陆的人。用户是用生日作密码的人。用户是在所有需要密码的地方使用同一个密码的人。 这是生来就写在每个人的 DNA 上的东西,你很难通过简单说教来改变。开发人员应当正视这个现实。 |
|
10楼#
发布于:2005-09-21 20:43
如果不开发 xpcom,FF 怎样满足企业用户执行 intranet 程式的需要? |
|
|
11楼#
发布于:2005-09-21 20:43
这个例子很明显的展示出,用户仅仅是使用默认设置,你不能指望用户会设置你那一套安全机制。 而且,普通用户只会越设越松,绝不会越设越紧。 我的经验是,只有少数人会通过学习自行寻找解决办法,绝大多数永远保持在 "新人" 状态。 [quote="abc@home"] FF 不是也发展 xpcom 来加强功能吗?重要的是怎样加强安全性,而非禁止或不支持。 [/quote] 我的意思是,整个安全性架构当中,根本就不应当存在用户这个角色。否则即是一个失败的安全性架构,没有任何安全性可言。 IE 也好,Firefox 也好,永远不要把本地应用和网络上下载来的程序混为一谈,然后指望用户善加区分 -- 用户既不会,也不能。 |
|
12楼#
发布于:2005-09-21 20:43
你说的这些东西仅仅是理论上听起来很好,实际当中作用很小,因为用户根本不会吃你那一套。不客气地说,就是那种要人喂到跳蚤嘴里才起作用的跳蚤药。 IE 以往的默认安全性设置较低,才做成 activex 安装问题,但 sp2 收紧默认安全性设置,activex 自动安装问题已经解决。当然用户主动安装或授权安装恶意软件/控件仍然不能避免。 安全意识需要时间培养。国外用户较早接触互联网,安全意识一般较高,基本上不存在那些比如乱按确认等问题。 新人不熟悉环境,有问题直接在论坛发问是十分平常。如果解答他们同时给出 FAQ/KB 链接,他们下次便懂得在哪里找答案。当然也不能完全避免"重犯"。 [quote="mopz0506"]IE7 刚去了 ActiveX,现在 MS 变本加厉,又来了一个集成更加紧密的 .Net 2.0,据说网页可调用整个 .Net 类库。如果是真的,安全问题只会更突出。等着瞧吧。[/quote] FF 不是也发展 xpcom 来加强功能吗?重要的是怎样加强安全性,而非禁止或不支持。 |
|
|
13楼#
发布于:2005-09-21 20:43
其实有时候我们根本就不需要那么多功能。
|
|
|
14楼#
发布于:2005-09-21 20:43
你说的这些东西仅仅是理论上听起来很好,实际当中作用很小,因为用户根本不会吃你那一套。不客气地说,就是那种要人喂到跳蚤嘴里才起作用的跳蚤药。 这么多年来 IE 上 ActiveX 的教训还不够吗?IE 提供的那些设置、那些等级,有用吗?不要下载、运行来历不明的软件、不要用管理员权限登录,说了多少年又多少年,有人听劝告吗? 举个身边的例子,FF 有了问题,本论坛有多少人会先去看 FAQ?会先去搜索?还不是直接就发贴子来问,同样的问题反复回答?比如 Linux 下安装 Firefox 的问题,我就回答过好几次。 以前我对这种上来就问的人是深恶痛绝,但是这种情况多了,渐渐地我明白这是人的本性,不应苛责。 什么是易用性? 不是 Longhorn/Mac 那个什么超级眩的基于 DirectX 还是 OpenGL 的狗屁不通的图形界面,而是用户上来不用任何设置就用,用上三年什么状况都不出,使用过程中程序什么问题都不问。 IE7 刚去了 ActiveX,现在 MS 变本加厉,又来了一个集成更加紧密的 .Net 2.0,据说网页可调用整个 .Net 类库。如果是真的,安全问题只会更突出。等着瞧吧。 |
|
上一页
下一页