Html 防止在网页中复制文本
我有一份测验申请表。机器人在聊天时问不同的问题,这些问题属于不同的知识领域。首先回答问题的用户将获得积分。问题是,一些用户在谷歌上搜索答案。我想以某种方式阻止用户处理来自网页和谷歌搜索答案的问题Html 防止在网页中复制文本,html,copy-paste,copy-protection,Html,Copy Paste,Copy Protection,我有一份测验申请表。机器人在聊天时问不同的问题,这些问题属于不同的知识领域。首先回答问题的用户将获得积分。问题是,一些用户在谷歌上搜索答案。我想以某种方式阻止用户处理来自网页和谷歌搜索答案的问题 我甚至不确定,这是否可能,无论如何,可能有人有任何想法没有好的方法来做到这一点。一个骗子几乎可以处理所有的事情 唯一想到的是将问题作为动态生成的图像输出。这样可以防止复制粘贴。不过,你必须决定这到底能起到多大的保护作用——大多数简短的问题可以在短时间内输入谷歌,不是吗?这里: 当窗口的onBlur事件
我甚至不确定,这是否可能,无论如何,可能有人有任何想法没有好的方法来做到这一点。一个骗子几乎可以处理所有的事情 唯一想到的是将问题作为动态生成的图像输出。这样可以防止复制粘贴。不过,你必须决定这到底能起到多大的保护作用——大多数简短的问题可以在短时间内输入谷歌,不是吗?这里:
当窗口的onBlur事件被触发时,不允许他们应答。他们仍然可以使用其他设备,但不能在同一台计算机上作弊。你可以用谷歌查询每个给定的答案,如果没有精确匹配,很可能是用户自己输入的,您可以给予分数。您可以在包含测验/问题的元素顶部放置一个透明的PNG吗?在您粘贴问题的div标签中,添加以下代码行:
<div id="test" onmousedown='return false;' onselectstart='return false;'>
这将防止复制标签中的任何内容…您还可以将页面设置为图像,而不是html/文本
从图像中复制文本并不容易。它必须保存并进行OCR 请注意,如果用户希望通过浏览器端的Greasemonkey脚本或类似脚本覆盖禁止复制规则,则可以通过Google找到此问题 除了选择禁用外,我在至少一个网站上看到了以下策略:
<body oncopy="return false" onpaste="return false" oncut="return false">...</body>
。。。
var isCtrl=false;
document.onkeyup=函数(e)
{
如果(e.which==17)
isCtrl=假;
}
document.onkeydown=函数(e)
{
如果(e.which==123)
isCtrl=真;
如果((e.which==85)| |(e.which==65)| |(e.which==88)| |(e.which==67)| |(e.which==86)| |(e.which==2)| | |(e.which==3)| |(e.which==123)| |(e.which==83)&isCtrl==true)
{
警报(“此功能已禁用”);
返回false;
}
}
//右键单击代码
var isNS=(navigator.appName==“Netscape”)?1 : 0;
if(navigator.appName==“Netscape”)document.captureEvents(Event.MOUSEDOWN | | Event.MOUSEUP);
函数mishandler(){
警报(“此功能已禁用”);
返回false;
}
功能鼠标手柄(e){
var myevent=(isNS)?e:事件;
var eventbutton=(isNS)?myevent.which:myevent.button;
if((eventbutton==2)|(eventbutton==3))返回false;
}
document.oncontextmenu=mishandler;
document.onmousedown=mousehandler;
document.onmouseup=鼠标手柄;
//选择内容代码禁用alok goyal
功能副本(e){
返回错误
}
函数可重入(){
返回真值
}
document.onselectstart=新函数(“返回false”)
if(窗口侧栏){
document.onmousedown=killCopy
document.onclick=可重入
}
禁用代码右键单击并按ctrl a、ctrl u、ctrl c、ctrl v键和f12,然后选择内容代码
一些文字。。。
如果使用JQuery,请使用:
function disableSelection(target){
$(function() {
$(this).bind("contextmenu", function(e) {
e.preventDefault();
});
});
if (typeof target.onselectstart!="undefined") //For IE
target.onselectstart=function(){return false}
else if (typeof target.style.MozUserSelect!="undefined") //For Firefox
target.style.MozUserSelect="none"
else //All other route (For Opera)
target.onmousedown=function(){return false}
target.style.cursor = "default";
}
在要禁用的位置调用此函数
$(document).ready(function(){
disableSelection(document.body);
});
您可以使用ArtistScope Site Protection System(ASPS)防止所有复制,包括屏幕捕获和录制,也可以仅使用ArtistScope浏览器防止复制粘贴和拖放。它是最安全的解决方案,并经过验证。供全世界的在线导师和大学使用。对于未来可能不想阻止突出显示或希望允许用户复制有限数量字符的谷歌用户:
function anticopy(event: ClipboardEvent) {
// @ts-ignore
const clipboardData = event.originalEvent.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
const txt = window.getSelection().toString() || editor.getWin().getSelection().toString();
if (txt.length > 200) {
const no = 'You cannot copy more than 200 characters.';
clipboardData.setData('text', no);
clipboardData.setData('text/html', `<p>${no}</p>`);
} else {
const html = `<p><span data-user="${user.data.id}"></span> ${txt}</p>`;
clipboardData.setData('text', txt);
clipboardData.setData('text/html', html);
}
event.preventDefault();
}
函数反复制(事件:ClipboardEvent){
//@ts忽略
const clipboardData=event.originalEvent.clipboardData | | window.clipboardData | | event.originalEvent.clipboardData;
const txt=window.getSelection().toString()| | editor.getWin().getSelection().toString();
如果(txt.length>200){
const no='不能复制超过200个字符';
设置数据('text',no);
setData('text/html',`${no}`);
}否则{
常量html=`${txt}`;
setData('text',txt);
setData('text/html',html);
}
event.preventDefault();
}
你打算如何阻止记忆正常的人在搜索引擎中输入内容?输入需要更多的时间。键入时,下一个问题将被要求全屏显示,如果它失去焦点或退出全屏显示,则检测该问题并永远取消测试。重新编写相同问题的20个版本。如果用户精通技术,则他仍可以使用FIrefox/chrome中的firebug/developer工具进行复制。所以,使用图像是最好的选择。这也适用于放置容器div,您可以在其中显示来自谷歌地图、MapQuest等的地图。在订阅之前,我将其用于隐藏内容。
$(document).ready(function(){
disableSelection(document.body);
});
function anticopy(event: ClipboardEvent) {
// @ts-ignore
const clipboardData = event.originalEvent.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
const txt = window.getSelection().toString() || editor.getWin().getSelection().toString();
if (txt.length > 200) {
const no = 'You cannot copy more than 200 characters.';
clipboardData.setData('text', no);
clipboardData.setData('text/html', `<p>${no}</p>`);
} else {
const html = `<p><span data-user="${user.data.id}"></span> ${txt}</p>`;
clipboardData.setData('text', txt);
clipboardData.setData('text/html', html);
}
event.preventDefault();
}