该问题与another question I asked有关,但我意识到该问题中的一个旁题值得它自己的问题。
使用JavaScript,我想查看用户正在从网页复制什么。当用户粘贴
时,读取剪贴板内容非常容易:document.addEventListener("paste", e => {
let text = e.clipboardData.getData("text");
alert("pasting text: " + text);
});
这将正确创建一个警报,粘贴任何内容。但是,当用户复制
时,获取剪贴板数据更加困难。document.addEventListener("copy", e => {
let text = e.clipboardData.getData("text");
alert("copying text: " + text);
});
这会提示“正在复制数据:”,但后面没有文字。这是因为getData
方法返回""
(空字符串)。我的理解是,在您执行粘贴操作以外的其他任何操作时,如果站点无法读取剪贴板,将被视为一个非常安全的问题。
document.addEventListener("copy", () => {
navigator.clipboard.readText().then(text => alert("copied text: " + text));
});
这可行,但是在发出警报之前,它会创建一个弹出窗口,要求网站允许其读取剪贴板。我希望没有此弹出窗口。
document.addEventListener("copy", () => {
let text = window.getSelection().toString();
alert("copying text: " + text);
});
这似乎可以满足我的要求。允许这样做似乎很奇怪,但是方法1却不允许。
我有几个问题:
text
变量而言,不是弹出行为)?目前,我仅在Google Chrome或Chromium的环境中关心这些答案,而不是其他浏览器。对这些问题中的任何一个的回答将不胜感激。
答案 0 :(得分:1)
tl; dr 如果确实认为对用户不诚实的做法是合理的,则使用方法3。这是一个很好的解决方法,尽管许多人可能认为这是一种利用。 / p>
看看W3规范(https://www.w3.org/TR/clipboard-apis/#Cases),我们可以了解到为什么这些事件(以及仍在开发中的API)首先存在的原因。具体来说,copy
可以让您更改,以在目标paste
不是目标用户实际想要放置到剪贴板的情况下复制的内容存在,可以让您处理将数据传输到应用程序中。
知道了这一点,我们可以得出一些结论: