使用 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!';
}
尝试在 Fiddle 中复制/粘贴文本。
我有一个网页,其中文本包含 ­
个字符(= 软连字符)和其他不寻常的实体混合在一起。虽然这些实体对于正确显示页面是必需的,但我想过滤它们超出从页面复制到剪贴板的文本。
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!';
}
尝试在 Fiddle 中复制/粘贴文本。