这个JS复制技巧是如何工作的?

5
此页面上,无论您在页面上的哪个位置复制文本,都会在您的复制文本末尾添加字符串Read more at http://。我想知道是如何实现的。查看源代码(post-copypaste.js)并设置断点后,我仍然不理解。那个区域似乎是在我选择文本时触发的。

我尝试查看DOM(通过Firefox中的查看选定源),但在DOM中没有看到该文本。因此,这一定是JavaScript技巧。我可以想象捕获控制C事件(我不知道是否正在发生),但我无法想象如何添加或影响被复制的文本,因为它属于DOM。我没有看到闪烁或任何东西。

这个JS技巧是如何工作的,或者我如何调试它以找出答案?


4
在那个页面上,它是通过http://i.po.st/static/script/post-copypaste.js实现的(在Chrome Web Inspector中找到,div.block-feed上有一个copy事件的监听器)。 - robertklep
3
为什么要踩这个帖子呢?楼主提出了一个真诚的问题并请求帮助。对于这个问题,已经进行了适当的研究,而且楼主的意图也很明确。 - Mat Richardson
我在 Chrome 24 中没有得到相同的行为... - guypursey
1
这确实是Javascript!您可以在此处找到要使用的脚本(https://dev59.com/l3I-5IYBdhLWcg3wEEHu)! - Barnabas Kecskes
@guypursey:我的Chrome 25可以做到。 - user34537
显示剩余2条评论
1个回答

0
但尴尬的是,常规窗口/ DOM 上的选择似乎并没有受到影响。 事实上是受到了影响,只是不可见。通常情况下,在页面的其他地方(不一定可见)会有一个容器。您选择的内容将被粘贴到其中,然后进行扩展,然后从容器中复制并删除。这一切都需要几分之一秒的时间,当您在某个地方粘贴它时,您的剪贴板已经存储了扩展的内容。
如果您仔细观察您链接的示例页面,您会发现 body 中有一个空的 div 标签,类名为 pw-root。<div class='pw-root'></div> 当您复制文本时,瞬间(例如在 Firebug 中可见),它会按上述方式更改,然后再次清空。

有趣的是,当焦点/选择在不在屏幕上的隐藏div时,我仍然不知道如何保持选择(在屏幕上不隐藏)。有人发布了http://bavotasan.com/2010/add-a-copyright-notice-to-copied-text/,在该示例中由于使用了技巧,文本被复制时确实会取消选择。 - user34537
你如何以一种能够看到发生情况的方式打断程序?我记得有一次有人向我展示了一个Chrome技巧,但我不知道如何让Firebug在那个点上中断。 - user34537

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接