当前位置: 首页 > 面试题库 >

如何向复制的Web文本添加额外信息

裘禄
2023-03-14
问题内容

现在,某些网站使用Tynt的JavaScript服务,该服务将文本追加到复制的内容中。

如果使用此方法从站点复制文本然后粘贴,则在文本底部会获得指向原始内容的链接。

Tynt也会跟踪这种情况的发生。做得好,这是一个巧妙的技巧。

他们执行此操作的脚本令人印象深刻-而不是尝试操纵剪贴板(只有IE的较早版本才允许他们执行默认操作,并且应该始终将其关闭),而是操纵实际的选择。

因此,当您选择文本块时,多余的内容将作为隐藏内容添加<div>到您的选择中。粘贴时,多余的样式将被忽略,并显示多余的链接。

实际上,使用简单的文本块很容易做到这一点,但是当您考虑到在不同浏览器中跨复杂HTML进行所有选择时,这将是一场噩梦。

我正在开发一个Web应用程序-我不希望任何人都能跟踪复制的内容,并且我希望额外的信息包含上下文相关的内容,而不仅仅是链接。在这种情况下,Tynt的服务并不适合。

有谁知道开源的JavaScript库(可能是jQuery插件或类似的插件)提供相似的功能,但不公开内部应用程序数据?


问题答案:

2020更新

适用于所有 最新 浏览器的解决方案。

document.addEventListener('copy', (event) => {

  const pagelink = `\n\nRead more at: ${document.location.href}`;

  event.clipboardData.setData('text', document.getSelection() + pagelink);

  event.preventDefault();

});


Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br/>

<textarea name="textarea" rows="7" cols="50" placeholder="paste your copied text here"></textarea>

[旧帖子-2020年更新之前]

向复制的Web文本添加额外信息的主要方法有两种。

1.操纵选择

这个想法是要注意copy event,然后将带有额外信息的隐藏容器添加到,然后将dom选择范围扩展到该容器。
这种方法适合从c.bavota。还要检查jitbit_的版本以了解更复杂的情况。

  • 浏览器兼容性 :所有主要浏览器,IE> 8。
  • JavaScript代码
    function addLink() {
        //Get the selected text and append the extra info
        var selection = window.getSelection(),
            pagelink = '<br /><br /> Read more at: ' + document.location.href,
            copytext = selection + pagelink,
            newdiv = document.createElement('div');
    
        //hide the newly created container
        newdiv.style.position = 'absolute';
        newdiv.style.left = '-99999px';
    
        //insert the container, fill it with the extended text, and define the new selection
        document.body.appendChild(newdiv);
        newdiv.innerHTML = copytext;
        selection.selectAllChildren(newdiv);
    
        window.setTimeout(function () {
            document.body.removeChild(newdiv);
        }, 100);
    }
    
    document.addEventListener('copy', addLink);
    

2.操作剪贴板

这个想法是观看copyevent并直接修改剪贴板数据。使用该clipboardData属性是可能的。请注意,此属性可在中的所有主要浏览器中使用read- only。该setData方法仅在IE上可用。

  • 浏览器兼容性 :IE> 4。
  • JavaScript代码
    function addLink(event) {
        event.preventDefault();
    
        var pagelink = '\n\n Read more at: ' + document.location.href,
            copytext =  window.getSelection() + pagelink;
    
        if (window.clipboardData) {
            window.clipboardData.setData('Text', copytext);
        }
    }
    
    document.addEventListener('copy', addLink);
    


 类似资料:
  • 如果我有这样一个空的数据frame:

  • 问题内容: 如果我有一个空的数据框: 有没有一种方法可以向此新创建的数据框添加新行?目前,我必须创建一个字典,将其填充,然后将字典附加到最后的数据框中。有没有更直接的方法? 问题答案: 即将发布的pandas 0.13版本将允许通过不存在的索引数据添加行。但是,请注意,这实际上会创建整个DataFrame的副本,因此这不是有效的操作。 说明在此处,此新功能称为“ 放大设置” 。

  • 我有两个视频文件,具有以下流: 文件1: 文件2: 两个文件都有完全相同的视频内容,但第一个视频有德语音轨,第二个视频有英语音轨。 如何从德语视频文件中提取音轨并将其添加到英语视频文件中,而不丢失英语字幕,并能够在媒体播放器中在这些音轨之间进行选择? 我对此进行了搜索,我找到了类似问题的多个答案,但都不起作用:有些只包含一个音轨,有些同时播放两个音轨。 我不确定这个问题是否应该在Super Use

  • 嗨,我正在尝试重新创建一个足球锦标赛,已经能够创建一个地图的集团,但现在想要添加到每个国家的点数。有人有什么好主意吗?请看看我已经做了什么。

  • 我有一个,作为布局管理器,我正在尝试获得这种安排: 忽略边框的额外深蓝色空间。 我总共有5列和3行,所有组件都将设置PreferredSize()设置为精确值,以完全适合同样具有首选大小(170 x 115)的JPanel。 问题是似乎在最后一列宽度上添加了30 pxls,因为仅在的宽度上添加了30 pxls(总共200个)组件显示正确,如下所示: 但由于额外的空间,最后一列被分隔开了。 它添加了

  • 我正在尝试将Gradle(1.4)添加到一个现有的项目中,该项目有多个测试套件。位于中的标准单元测试成功运行,但我在设置任务以运行位于中的JUnit测试时遇到了麻烦。 当我运行时,对于中的类,我遇到了几个错误。这使我认为依赖项设置不正确。如何设置以便它运行我的JUnit集成测试? Build.Gradle 细节:1.4级 解决方案:我没有为集成测试源集设置编译类路径(参见下面)。在我的I代码中,我