使用 JavaScript 过滤从网页复制的文本的最简单方法

Simplest way to filter text copied from a web page using JavaScript

我有一个网页,其中文本包含 ­ 个字符(= 软连字符)和其他不寻常的实体混合在一起。虽然这些实体对于正确显示页面是必需的,但我想过滤它们超出从页面复制到剪贴板的文本。

1) JavaScript 可以吗?我熟悉 onCopy 事件,但我看到的示例并未使复制的文本可用于进一步处理。

2) 如果可以,最简单的方法是什么?

我不能做什么:

a) 在服务器端更改网页中的字符。

b) 安装 JQuery 或其他 JS 框架,仅用于此功能。

有一段时间我觉得只用JS不行,但是你可以!您需要使用 oncopy 事件处理程序,并将选择更改为包含过滤文本的临时 div。

这是一个例子:

function copyHandler() {
    //Get the selected text
    var selection = window.getSelection(),
        // Filter it
        newText = filterText( selection ),
        // Create a div
        newdiv = document.createElement('div');
    // Hide it
    newdiv.style.position = 'absolute';
    newdiv.style.left = '-99999px';

    // Insert the div in the body
    document.body.appendChild(newdiv);
    // Put the text in it
    newdiv.innerHTML = newText;
    // Select what's in the div
    selection.selectAllChildren(newdiv);

    // When the copy is over, remove the temporary div
    window.setTimeout(function () {
        document.body.removeChild(newdiv);
    }, 100);
}

document.addEventListener('copy', copyHandler);


function filterText(txt){
    /* Do whatever you want here */
    /* To show that it's working, I'll just return that string every time */
    return 'I\'m a filtered String!';
}

JS Fiddle Demo

尝试在 Fiddle 中复制/粘贴文本。