早期互联网上流行的防止copy方法,禁掉右键,其实查看源代码或者 ctrl-c 后,秘密就无处遮掩了,只防纯小白。这次实验新的方法来解决查看源代码与 ctrl-c 的问题(当然 firebug 类工具还是无法欺骗的),首先声明我支持开放,Just For Fun !(感谢 lifesinger 的关键技术点探索)。
?
PS:根据众多网友反馈,该方法在使用浏览器工具栏编辑菜单复制时失效,也可改作监听尚不标准但广泛实现的 copy 事件,那么这时也不需要禁用右键 了。
?
no-copy demo
?
1.看 html 源代码 :空,内容全部由 javascript 生成,缺点就是 SEO 悲剧了。
?
2.看 javascript 源代码 :要抽取你想要的内容,先不说业务复杂情况下看懂的成本,首先先要 unicode 解码,如果内容飞散开来,即使开发者估计也会望而却步吧。
?
3.最后:ctr-c 看看你的剪贴板吧
?
原理:
其实很简单:
1.监控 ctrl -c 按键 copy 事件,选择警告信息 textarea,这样子 ctrl-c copy 就会作用到警告信息textarea 了,剪贴板中就是警告信息了。
?
<textarea>禁止copy!</textarea>
?
2.阻止 document 上的 contextmenu 事件
3.选择区域的恢复,在 select textarea 后,异步恢复原先用户的选择区域,这样才能真正神不知鬼不觉:)
?
源码:
no-copy 源码
?
应用点2:阻止 copy 钓鱼网址
?
?
有时候不法网页中会发布一些钓鱼网站 (fraud?),为了伪装会采用:
?
?
http://www.tao<span style="display:none;">123</span>bao.com?
当你复制后,如果不注意直接黏在浏览器上打开就中计了,仔细一点会发现其实复制的是 http://www.tao123bao.com,这种情况下就可以利用上面的方法,过滤用户原先复制的内容进而篡改用户 copy 的内容,实现乾坤大挪移:
no-fraud demo
?
?
注意点:
1.ie 与 标准浏览器的range区别
?
2.非法内容的过滤,如不可见标签内容:
?
function clear(node) { var style = node.style; if ((style.position != "" && style.position != "static") || style.display == "none" || style.visibility == "hidden" ) { node.parentNode.removeChild(node); return true; } return false; }?
3.事前保存选择区域,事后进行选择区域恢复
?
no-fraud 源码
?
?
修订于:2010-08-13
上面那个demo,我在linux下选中,然后中键就是粘贴。将来还会有更方便的操作方式。说难听点,这种禁止复制有点“反人类”的味道 :-)
更关键的应该是引导用户,提高用户的版权意识和尊重他人的劳动成果。这才是正道。
上面那个demo,我在linux下选中,然后中键就是粘贴。将来还会有更方便的操作方式。说难听点,这种禁止复制有点“反人类”的味道 :-)
更关键的应该是引导用户,提高用户的版权意识和尊重他人的劳动成果。这才是正道。
Just For Fun....我支持开放,linux还有中键的啊,还以为考虑了mac command+c就够了呢
//异步 setTimeout(function() { r.select(); }, 0);
0毫秒之后执行?不明白这个怎么异步的
//异步 setTimeout(function() { r.select(); }, 0);
0毫秒之后执行?不明白这个怎么异步的
为了使浏览器能够把当前选中的数据放到剪贴版
参见:http://yiminghe.iteye.com/blog/636369
IE: 选中,加速器中随便选一个...
//异步 setTimeout(function() { r.select(); }, 0);
0毫秒之后执行?不明白这个怎么异步的
为了使浏览器能够把当前选中的数据放到剪贴版
参见:http://yiminghe.iteye.com/blog/636369
多谢。好像明白了,是为了在当前事件结束后再执行,因为当前事件的代码里也有调用了select();