84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
比如说我复制的
123456
最后出现的是著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:stevenliuyi链接:http://www.zhihu.com/question/20451870/answer/15168034来源:知乎
业精于勤,荒于嬉;行成于思,毁于随。
答案区域监听copy事件,并阻止这个事件的默认行为。
copy
获取选中的内容(window.getSelection())加上版权信息,然后设置到剪切板(clipboardData.setData())。
window.getSelection()
clipboardData.setData()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <p id="answer">测试数据<b>test</b></p> <script> function setClipboardText(event){ event.preventDefault(); var node = document.createElement('p'); //对documentfragment不熟,不知道怎么获取里面的内容,用了一个比较笨的方式 node.appendChild(window.getSelection().getRangeAt(0).cloneContents()); var htmlData = '<p>著作权归作者所有。<br />' + '商业转载请联系作者获得授权,非商业转载请注明出处。<br />' + '作者:tiantian<br />链接:http://segmentfault.com/u/tiantian_<br />' + '来源:segmentfault<br /><br />' + node.innerHTML + '</p>'; var textData = '著作权归作者所有。\n' + '商业转载请联系作者获得授权,非商业转载请注明出处。\n' + '作者:tiantian\n链接:http://segmentfault.com/u/tiantian_\n' + '来源:segmentfault\n\n' + window.getSelection().getRangeAt(0); if(event.clipboardData){ event.clipboardData.setData("text/html", htmlData); event.clipboardData.setData("text/plain",textData); } else if(window.clipboardData){ return window.clipboardData.setData("text", textData); } }; var answer = document.getElementById("answer"); answer.addEventListener('copy',function(e){ setClipboardText(e); }); </script> </body> </html>
看了知乎的代码,大致也是这么实现的,但是还加入了一些其他的判断,比如如果答案设置了不能复制,则阻止copy事件,并显示提示信息,如果复制的文本长度小于42的话,不会加上版权信息。
copy事件可以参考:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/oncopyhttp://codebits.glennjones.net/editing/setclipboarddata.htm
没有这个问题啊
大体思路:
答案区域监听
copy
事件,并阻止这个事件的默认行为。获取选中的内容(
window.getSelection()
)加上版权信息,然后设置到剪切板(clipboardData.setData()
)。下面的代码实现了一个简单的DEMO
看了知乎的代码,大致也是这么实现的,但是还加入了一些其他的判断,比如如果答案设置了不能复制,则阻止
copy
事件,并显示提示信息,如果复制的文本长度小于42的话,不会加上版权信息。copy
事件可以参考:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/oncopy
http://codebits.glennjones.net/editing/setclipboarddata.htm
没有这个问题啊