提问人:Hashim Aziz 提问时间:11/14/2023 最后编辑:Hashim Aziz 更新时间:11/14/2023 访问量:32
禁用上下文菜单和复制粘贴(输入字段除外)
Disable context menu and copy-paste except on input fields
问:
我有一个客户,由于内容的质量及其在 SEO 中的重要性,许多内容经常直接从竞争对手的网站上撕下来。为了尽可能防止这种情况,客户端希望禁用右键单击上下文菜单以及使用 JavaScript 选择、复制和粘贴文本(我们已经有其他非 JavaScript 措施)。
我已经向他们解释过,这些措施不太可能阻止那些有足够时间和精力的人,但我们都同意,它们将是一个主要的威慑力量,并有助于显着减少内容盗窃的数量,特别是因为那些可能从事这种行为的人是营销人员和/或商人。
此外,网站的性质也意味着除了输入字段之外,这些措施不太可能对用户体验产生太大影响。因此,我怎样才能在整个站点中实现此行为,同时确保仍然可以正常编辑任何输入字段?
答:
0赞
Hashim Aziz
11/14/2023
#1
这是迄今为止我能够想到的唯一可行的解决方案。任何建议的改进都非常受欢迎,如果有人能想出更清洁/更高性能的解决方案(极有可能),那么请将它们作为答案发布。
function blockEvent(e) {
e.preventDefault();
e.stopPropagation();
return false;
}
function enableEvent(e) {
e.stopPropagation();
return true;
}
document.addEventListener("contextmenu", blockEvent);
document.addEventListener("cut", blockEvent);
document.addEventListener("copy", blockEvent);
document.addEventListener("selectstart", blockEvent);
document.addEventListener("dragstart", blockEvent);
let inputs = document.querySelectorAll("input");
Array.prototype.slice.call(inputs).forEach((input) => {
input.addEventListener("contextmenu", enableEvent);
input.addEventListener("cut", enableEvent);
input.addEventListener("copy", enableEvent);
input.addEventListener("selectstart", enableEvent);
input.addEventListener("dragstart", enableEvent);
});
评论